2010-11-17 54 views
7

我目前正在面對使用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

回答

4

一種方法是這樣的:

對於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/

拉里

相關問題