我目前在使用 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) {
....
}
}
我们只使用soap 作为POX 消息的薄包装,由XSD 定义。这也意味着我们使用返回码和消息而不是错误。
每个响应都继承自
<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方法中抛出的所有异常都可以清晰地映射。
然而,有两种类型的错误仍未被捕获并生成错误而不是明确的错误消息:
- XSD 验证错误
- 格式错误的 XML 错误
归根结底,这些问题与使用 Spring WS 的每个 POX Web 服务相关。应该如何拦截这些异常并将其映射到响应对象上?
但请记住:所有响应对象都略有不同,因为它们都继承自通用对象,但添加了一些独特的可选内容。