如何使用Spring-WS将异常转换为返回码?

问题描述:

我目前正在面对使用Spring WS的错误代码和消息的问题。如何使用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) { 
     .... 
    } 
} 

我们使用肥皂仅作为围绕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> 

继承并增加了一些细节在成功的情况下,这样的:handleMyPart方法可以干净地映射内被抛出

<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> 

所有的异常。

但是两种类型的错误仍然未捕获并产生故障,而不是一个明确的错误消息:

  • XSD验证错误
  • 畸形XML错误

在一天结束的时候,这些是与使用Spring WS的每个POX webservice相关的问题。应该如何拦截这些异常并映射到响应对象上?

请记住:所有响应对象都略有不同,因为它们都是从普通对象继承而来,但为其添加了一些独特的可选内容。是的运作良好,我

+0

我只是提出了关于Spring-WS吉拉功能要求:HTTPS:/ /jira.springframework.org/browse/SWS-657 – 2010-11-18 12:33:29

一种方法是这样的:

对于XSD验证错误,延长AbstractValidatingInterceptor提供XSD验证错误的自定义处理,并将其设置为在Spring上下文中的validatingInterceptor豆。

对于格式错误的XML,请扩展MessageDispatcherServlet。重写doService以捕获DomPoxMessageException,并在捕获该异常时添加自己的自定义处理。将自定义的MessageDispatcherServlet设置为web.xml中的spring-ws servlet。

我在我的博客中这样写了详细广告nauseum这里:

http://www.dev-garden.org/2011/09/03/handling-pox-errors-in-spring-ws-part-1/

拉里