2015-04-07 79 views
0

我想要做以下事情。
1)我在WSDL上運行wsimport來生成Java代碼。
2)wsimport生成一個表示WSDL接口的Java接口。
3)我想用反射來發現接口中方法的參數類和返回類型。

下面顯示的是wsimport生成的界面。如何使用Java反射獲取javax.xml.ws.Holder中的實際類型?

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); 
} 

我的問題是特定於方法getMeaning2的第二個和第三個參數。 我能夠使用反射api獲取方法的參數。 Method.getParameterTypes(注意,這實際上是一個實例方法)。

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

該數組的第二個和第三個元素的類型爲javax.xml.ws.Holder類。

我的問題是如何從參數3和參數4中獲取實際類型(在本例中爲GetMeaningResponse21.class和GetMeaningResponse2.class)?

回答

0

我想通過Holder類獲得實際值類型的一種方法。

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

actualParamClass是由持有人類保持的實際類型的類。

相關問題