1

ICwsTransactionProcessing_Capture_CWSInvalidOperationFaultFault_FaultMessage以下に定義されているように呼び出される1つのクラスがあります

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います。なんで?

4

1 に答える 1

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 ブランチで修正されています。

助けてくれてありがとう。

于 2013-01-02T15:41:45.750 に答える