0

ServiceException、ConnectionException、InvalidDataException の 3 種類のカスタム Web サービス障害をスローする Web サービスを使用しています。

これらの catch ブロックに加えて、Spring のランタイム例外である RemoteAccessException の catch ブロックも入れました。

catch (org.springframework.remoting.RemoteAccessException remoteAccessExc) {
}

上記のカスタム例外をテストしているときに、これら 3 種類の例外すべてがそれぞれの catch ブロックでキャッチされていないことがわかりました。代わりに、RemoteAccessException である最後の catch ブロックですべてがキャッチされます。タイプ org.springframework.remoting.jaxws.JaxWsSoapFaultException の SOAP エラーの例外オブジェクトのデバッグ中に、サービスが正しいエラーをスローしていることがわかりました。

私の懸念は、これらの障害が独自の catch ブロックに分類されない理由です。サービス自体は、サービス呼び出しを行うときにこれらの例外を処理するように指示します。

プロキシ Java クライアントを介してサービスにヒットすると、障害はそれぞれのブロックに正しく分類されます。POJO に問題があった場合は、この場合も機能しないはずです。ただし、この場合 (Java プロキシ クライアントを介してヒットした場合) は機能しているため、POJO では問題ありません。

spring-2.5.6.jar を使用しています。

4

1 に答える 1

0

異なる catch ブロックを保持していて、障害オブジェクトがオーバーライドされているため、次の手順を実行します。

各 catch ブロックでフォルト オブジェクトが null かどうかを確認して、フォルトがスローされたときに他の catch ブロックでオーバーライドされないようにします。これは、catch ブロックのすべてのエントリに not null チェックを入れているためです。

try{
    //////
}Catch(IllegalArgumentException e){
    create fault object;
    throw fault;    
}
Catch(Exception e){
    ///check whether fault object is not null

    if(fault!=null){
    throw fault;
}else{
    ///another fault object 
    throw fault1;
}
于 2012-08-30T08:36:37.983 に答える