如何使用Spring将异常转换为返回码
我目前面临使用Spring WS的错误代码和消息的问题。
为了方便起见,我们使用带有JAXB2绑定的Spring WS 2.0和@Endpoint和@PayloadRoot注释。
我们的端点如下所示:
@Endpoint
public class MyEndpoint() {
private static final String MY_NAMESPACE=...;
@PayloadRoot(namespace=MY_NAMESPACE, localPart="myPart")
public MyPartResponse handleMyPart(MyPart myPart) {
....
}
}
我们仅使用soap作为围绕由XSD定义的POX消息的薄包装。 这也意味着我们使用返回代码和消息而不是故障。
每个响应都从中继承
<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方法中引发的所有异常都可以干净地映射。
但是,两种类型的错误仍未被捕获,并且会生成错误而不是明确的错误消息:
在一天结束时, 这些问题与使用Spring WS的每个POX web服务相关 。 应该如何拦截这些异常并映射到响应对象上?
但请记住: 所有响应对象都略有不同,因为它们都是从普通对象继承而来,但为其添加了一些独特的可选内容。
对我而言,一个很好的方法是:
对于XSD验证错误,扩展AbstractValidatingInterceptor以提供XSD验证错误的自定义处理,并将其设置为Spring上下文中的validatingInterceptor bean。
对于格式不正确的XML,请扩展MessageDispatcherServlet。 重写doService以捕获DomPoxMessageException,并在捕获该异常时添加自己的自定义处理。 将自定义的MessageDispatcherServlet设置为web.xml中的spring-ws servlet。
我在这里的博客文章中详细记录了这些内容:
http://www.dev-garden.org/2011/09/03/handling-pox-errors-in-spring-ws-part-1/
-Larry
链接地址: http://www.djcxy.com/p/48845.html上一篇: How to transform exceptions into return codes using Spring