代码之家  ›  专栏  ›  技术社区  ›  Axel Fontaine

如何使用spring ws将异常转换为返回代码?

  •  8
  • Axel Fontaine  · 技术社区  · 15 年前

    我目前正面临使用spring ws的错误代码和消息的问题。

    我们使用Spring WS 2带有JAXB2绑定和@端点和@ PayLooBoad注释以方便使用。

    我们的端点如下所示:

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

    所有被抛出的异常 手部 方法可以被清晰地映射。

    然而,两种类型的错误仍然是错误的,而不是明确的错误消息生成错误:

    • XSD验证错误
    • 格式错误的XML错误

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

    但请记住: 所有响应对象略有不同 因为它们都继承自公共内容,但是添加了一些独特的可选内容。

    1 回复  |  直到 15 年前
        1
  •  5
  •   lreeder    14 年前

    有一种方法对我很有效:

    对于XSD验证错误,扩展ActualValualTebug拦截器以提供对XSD验证错误的自定义处理,并将其设置为Spring上下文中的ValueAccess拦截器bean。

    对于格式错误的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/

    拉里

    推荐文章