サービスの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フォルトのフォルトコードに到達するにはどうすればいいですか?
返されたSOAPMessageにアクセスできませんか? –
いいえ、私は自分のコードにキャッチされている例外を投げただけです – Nikoloz