2015-04-07 2 views
0

Я хочу сделать следующее.
1) Я запускаю wsimport на WSDL для генерации кода Java.
2) wsimport создает интерфейс Java, который представляет интерфейс WSDL.
3) Я хочу использовать отражение, чтобы обнаружить классы параметров и тип возвращаемого значения для методов в интерфейсе.

Ниже показан интерфейс, созданный wsimport.Как получить фактический тип в javax.xml.ws.Holder с использованием отражения Java?

public interface Sample2 { 
@WebMethod(action = "http://www.example.org/sample2/getMeaning2") 
public void getMeaning2(
    @WebParam(name = "getMeaning21", targetNamespace = "http://www.example.org/sample2/", partName = "parameters1") 
    GetMeaning21 parameters1, 
    @WebParam(name = "getMeaning2", targetNamespace = "http://www.example.org/sample2/", partName = "parameters2") 
    GetMeaning2 parameters2, 
    @WebParam(name = "getMeaningResponse21", targetNamespace = "http://www.example.org/sample2/", mode = WebParam.Mode.OUT, partName = "parameters3") 
    Holder<GetMeaningResponse21> parameters3, 
    @WebParam(name = "getMeaningResponse2", targetNamespace = "http://www.example.org/sample2/", mode = WebParam.Mode.OUT, partName = "parameters4") 
    Holder<GetMeaningResponse2> parameters4); 
} 

Мой вопрос специфичен для 2-го и 3-го параметров метода getMeaning2. Я могу получить параметры для метода, используя отражение api. Method.getParameterTypes (обратите внимание, что это фактически метод экземпляра).

Method declaredMethods[] = Sample2.class.getDeclaredMethods(); 
method = declaredMethods[0]; 
Class<?>[] parameterTypes = method.getParameterTypes(); 

2-й и 3-й элементы массива класса типа javax.xml.ws.Holder.

Мой вопрос: как получить фактический тип (в данном случае GetMeaningResponse21.class и GetMeaningResponse2.class) из параметров3 и parameters4?

ответ

0

Я выяснил способ получения Фактического типа значения в Держатель класс.

Type[] genericParameterTypes = method.getGenericParameterTypes(); 
String typeName = ((ParameterizedType)genericParameterTypes[2]).getActualTypeArguments()[0].toString(); 
typeName = typeName.substring("class ".length()); 
Class<?> actualParamClass = Class.forName(typeName); 

actualParamClass является класса фактического типа проведенного Holder класса.

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

  • Нет связанных вопросов^_^