2015-03-11 2 views
0

Я пытаюсь получить имя "best_user" аннотации @WebParam по параметру метода User user в методе интерфейса. Потому что это интерфейс, следующий код не дает мне доступ к аннотации:@WebParam по параметру интерфейса - как получить имя?

String methodName = "doSomething"; 

Class<?> clazz = Class.forName(packageName + "." + "UserService"); 

Method serviceMethod = null; 

for (Method method: clazz.getMethods()) 
{ 
    if (method.getName().equals(methodName)) 
    { 
     serviceMethod = method; 
     break; 
    } 
} 

Class<?>[] parameterTypes = serviceMethod.getParameterTypes(); 
WebParam webParam = parameterTypes[0].getAnnotation(WebParam.class); //webParam is null 
String parameterName = webParam.name(); 

Однако структура веб-сервис может получить эти данные. Как я могу это сделать?

Интерфейс:

@WebService(name = "UserService", targetNamespace = "my.targetNamespace") 
public interface UserService { 
    @WebMethod 
    public String doSomething 
     (
      @WebParam(name = "best_user") 
      User user 
     ) 
} 
+0

показать мне, как вы получите 'метод' метод? Если вы возьмете это из класса, аннотации не будет. Вам нужно будет получить его из интерфейса. –

+0

@ R4J Обновлен мой вопрос. – rapt

ответ

2

Это не является ограничением типов интерфейсов.

Method#getParameterTypes() возвращает массив типов параметров. В вашем примере он просто содержит User.class, так как ваш метод имеет один параметр типа User.

Вы хотите использовать Method#getParameterAnnotations() и получить первую аннотацию первого параметра.

Annotation[][] parameterTypes = serviceMethod.getParameterAnnotations(); 
WebParam webParam = (WebParam) parameterTypes[0][0]; 

Поскольку Java 8, вы можете также использовать Method#getParameters() и Parameter#getAnnotation()

WebParam webParam = serviceMethod.getParameters()[0].getAnnotation(WebParam.class); 
+0

То, что мне нужно! Бесконечно благодарен :) – rapt

Смежные вопросы