2013-11-20 5 views
8

サービスのWSDLに基づいて生成されたJAX-WSクライアントスタブを使用してSOAP Webサービスを使用します。エラーサーバの場合は、次のようにSOAPフォルトを返します。カスタムフォールト例外を処理する際にSOAPフォルトのフォルトコードを取得する方法

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Header /> 
    <s:Body> 
    <s:Fault> 
     <faultcode>SomeErrorCode</faultcode> 
     <faultstring xml:lang="en-US">Some error message</faultstring> 
     <detail> 
     <ApiFault xmlns="http://somenamespace.com/v1.0" xmlns:a="http://somenamespace.com/v1.0" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
      <a:RequestId>123456789</a:RequestId> 
      <a:CanRetry>true</a:CanRetry> 
     </ApiFault> 
     </detail> 
    </s:Fault> 
    </s:Body> 

WSDLに基づいてSomeCustomFault例外クラスが生成され、すべてのサービスのメソッドは、この(下記参照)例外をスローするように宣言されています。

@WebFault(name = "ApiFault", targetNamespace = "http://services.altasoft.ge/orders/v1.0") 
public class SomeCustomFault 
    extends Exception 
{ 
    private ApiFault faultInfo; 

    public SomeCustomFault(String message, ApiFault faultInfo) { 
     super(message); 
     this.faultInfo = faultInfo; 
    } 

    public SomeCustomFault(String message, ApiFault faultInfo, Throwable cause) { 
     super(message, cause); 
     this.faultInfo = faultInfo; 
    } 

    public ApiFault getFaultInfo() { 
     return faultInfo; 
    } 
} 

このカスタムフォールト例外がExceptionなくSOAPFaultExceptionを拡張して見ることができるように。 Hovewer getFaultCodeメソッドを使用してSOAPFaultExceptionからのみ取得できるSOAPフォルトのフォルトコードを取得する必要があります。 SOAPFaultExceptionまたは上記のカスタムフォールト例外を捕捉した場所でSOAPフォルトのフォルトコードに到達するにはどうすればいいですか?

+0

返されたSOAPMessageにアクセスできませんか? –

+0

いいえ、私は自分のコードにキャッチされている例外を投げただけです – Nikoloz

答えて

9

JAX-WS handlerを実装して、クライアントのWebサービス参照に追加することができます。これには、要求メッセージおよび応答メッセージORを処理する機会が与えられ、または障害が通知される。

SOAPHandler<SOAPMessageContext>を作成し、handleFault()メソッドにはSOAPMessageContextが渡されます。それでからSOAPFaultを取得すると、getFaultCode()getDetail()が含まれています。

新しいフォルトハンドラをWebサービスrefに割り当てます。 1つの方法は@HandlerChainです。これはあなたのcatch句の前に呼び出されます。

関連する問題