我有一个名为 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
。
我收到NoSuchMethodException
。为什么?
最佳答案
这是 wsdl2java 生成的客户端 stub 代码中的 Axis2 错误。
https://issues.apache.org/jira/browse/AXIS2-5420
生成的代码中使用的 String 类应该是 java.lang.String,但由于 WSDL 导入使用 Microsoft 序列化类型,Axis2 已生成名为 String 的内部类。
正确的代码生成应该使用java.lang.String
作为构造函数反射参数。
这有点难以发现,因为生成的 stub 有 20 万多行。
该错误已在未发布的 Axis2 1.6.3 和 1.7 分支中修复。
谢谢大家的帮助。
关于Java反射(reflect)getConstructor NoSuchMethodException错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14113523/