反身性和多态性

时间:2015-09-16 08:14:18

标签: java web-services inheritance reflection polymorphism

我必须通过将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()+";");

但我真的认为这很糟糕。

我需要一些帮助才能理解为了解决这个问题。 感谢

0 个答案:

没有答案