Java反映了getConstructor NoSuchMethodException错误

时间:2013-01-01 19:31:48

标签: java reflection getconstructor

我有一个名为ICwsTransactionProcessing_Capture_CWSInvalidOperationFaultFault_FaultMessage的课程,定义如下

public class ICwsTransactionProcessing_Capture_CWSInvalidOperationFaultFault_FaultMessage
        extends java.lang.Exception {

    private static final long serialVersionUID = 1354218639401L;

    public ICwsTransactionProcessing_Capture_CWSInvalidOperationFaultFault_FaultMessage() {
        super("ICwsTransactionProcessing_Capture_CWSInvalidOperationFaultFault_FaultMessage");
    }

    public ICwsTransactionProcessing_Capture_CWSInvalidOperationFaultFault_FaultMessage(
            java.lang.String s) {
        super(s);
    }

    public ICwsTransactionProcessing_Capture_CWSInvalidOperationFaultFault_FaultMessage(
            java.lang.String s, java.lang.Throwable ex) {
        super(s, ex);
    }

    public ICwsTransactionProcessing_Capture_CWSInvalidOperationFaultFault_FaultMessage(
            java.lang.Throwable cause) {
        super(cause);
    }
}

我正在尝试

java.lang.String exceptionClassName = (java.lang.String)faultExceptionClassNameMap.get(new org.apache.axis2.client.FaultMapKey(faultElt.getQName(),"Capture"));
                    LOGGER.debug("ExceptionClassName"+exceptionClassName);
                    java.lang.Class exceptionClass = java.lang.Class.forName(exceptionClassName);
                    java.lang.reflect.Constructor constructor = exceptionClass.getConstructor(String.class);

其中exceptionClass来自日志{。}}。

我得到了ICwsTransactionProcessing_Capture_CWSInvalidOperationFaultFault_FaultMessage。为什么呢?

1 个答案:

答案 0 :(得分:2)

这是wsdl2java生成的客户端存根代码中的Axis2错误。

https://issues.apache.org/jira/browse/AXIS2-5420

生成的代码中使用的String类应该是java.lang.String,但由于WSDL导入使用的是microsoft序列化类型,因此Axis2已经通过名称String生成了一个内部类。

正确的代码生成应该使用java.lang.String作为构造函数反射参数。

发现它有点困难,因为生成的存根有200k +行。

该错误已在未发布的Axis2 1.6.3和1.7分支中修复。

谢谢大家的帮助。