現在、Spring WS を使用してエラー コードとメッセージの問題に直面しています。
便宜上、JAXB2 バインディングと @Endpoint および @PayloadRoot アノテーションを備えた Spring WS 2.0 を使用しています。
エンドポイントは次のようになります。
@Endpoint
public class MyEndpoint() {
private static final String MY_NAMESPACE=...;
@PayloadRoot(namespace=MY_NAMESPACE, localPart="myPart")
public MyPartResponse handleMyPart(MyPart myPart) {
....
}
}
XSD で定義された POX メッセージの薄いラッパーとしてのみ、soap を使用します。これは、エラーの代わりにリターン コードとメッセージを使用することも意味します。
各レスポンスは
<xs:complexType name="ResultBase">
<xs:sequence>
<xs:element name="errorCode" type="tns:ErrorCode" />
<xs:element name="errorMessage" type="xs:string" />
</xs:sequence>
</xs:complexType>
次のように、成功した場合にいくつかの詳細を追加します。
<xs:element name="MySpecificResponse">
<xs:complexType>
<xs:complexContent>
<xs:extension base="tns:ResultBase">
<xs:sequence>
<xs:element name="mySpecificElement" type="tns:MySpecificType" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
handleMyPartメソッド内でスローされるすべての例外は、きれいにマップできます。
ただし、次の 2 種類のエラーは捕捉されず、明確なエラー メッセージではなくエラーが生成されます。
- XSD 検証エラー
- 不正な XML エラー
結局のところ、これらは Spring WS を使用するすべての POX Web サービスに関連する問題です。これらの例外をどのように傍受し、応答オブジェクトにマップする必要がありますか?
ただし、すべての応答オブジェクトは共通のものから継承するため、わずかに異なりますが、いくつかの独自のオプション コンテンツを追加します。