我必须通过将webservice完全限定类名称作为String参数传递,编写一个可以动态使用webservices的方法。 我的webservice类中有一个getPort方法。 我编写了一个小代码片段来获取该方法的所有签名。这是输出:
Méthode 1
javax.xml.namespace.QName
java.lang.Class
Méthode 2
javax.xml.ws.EndpointReference
java.lang.Class
[Ljavax.xml.ws.WebServiceFeature;
Méthode 3
java.lang.Class
[Ljavax.xml.ws.WebServiceFeature;
Méthode 4
java.lang.Class
Méthode 5
javax.xml.namespace.QName
java.lang.Class
[Ljavax.xml.ws.WebServiceFeature;
我认为' [L'在课程名称之前用于抽象'。 所以我写了这个方法:
public static Class<?>[] getTypes(Object[] args){
Class<?>[] paramTypes = null;
if(args != null)
{
paramTypes = new Class[args.length];
for(int i=0;i<args.length;++i)
{
if(args[i] instanceof javax.xml.ws.soap.MTOMFeature){
paramTypes[i] = args[i].getClass().getSuperclass();
}
else{
paramTypes[i] = args[i].getClass();
}
}
}
return paramTypes;
}
但我有以下错误:
Exception in thread "main" java.lang.NoSuchMethodException: com.****.****.****.****.****.****.getPort(java.lang.Class, javax.xml.ws.WebServiceFeature)
at java.lang.Class.getMethod(Class.java:1670)
at test.testws.createServiceSoapPort(testws.java:160)
at test.testws.main(testws.java:44)
如果我删除&#39;&#39;的实例测试我得到了这个错误:
Exception in thread "main" java.lang.NoSuchMethodException: com.****.****.****.****.****.****.getPort(java.lang.Class, javax.xml.ws.soap.MTOMFeature)
at java.lang.Class.getMethod(Class.java:1670)
at test.testws.createServiceSoapPort(testws.java:160)
at test.testws.main(testws.java:44)
修改
我如何修改
if(args[i] instanceof javax.xml.ws.soap.MTOMFeature){
paramTypes[i] = args[i].getClass().getSuperclass();
}
有类似的东西:
if(args[i] instanceof javax.xml.ws.soap.MTOMFeature[]){
paramTypes[i] = ArrayOf(args[i].getClass().getSuperclass());
}
我可以写:
paramTypes[i] = Class.forName("[L"+args[i].getClass().getSuperclass().getName()+";");
但我真的认为这很糟糕。
我需要一些帮助才能理解为了解决这个问题。 感谢