Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用SpringWS将异常转换为返回代码?_Java_Web Services_Soap_Spring Ws_Jaxb2 - Fatal编程技术网

Java 如何使用SpringWS将异常转换为返回代码?

Java 如何使用SpringWS将异常转换为返回代码?,java,web-services,soap,spring-ws,jaxb2,Java,Web Services,Soap,Spring Ws,Jaxb2,我目前面临使用SpringWS的错误代码和消息的问题 为了方便起见,我们使用带有JAXB2绑定和@Endpoint和@PayloadRoot注释的SpringWS2.0 我们的端点如下所示: @Endpoint public class MyEndpoint() { private static final String MY_NAMESPACE=...; @PayloadRoot(namespace=MY_NAMESPACE, localPart="myPart")

我目前面临使用SpringWS的错误代码和消息的问题

为了方便起见,我们使用带有JAXB2绑定和@Endpoint和@PayloadRoot注释的SpringWS2.0

我们的端点如下所示:

@Endpoint
public class MyEndpoint() {
    private static final String MY_NAMESPACE=...;

    @PayloadRoot(namespace=MY_NAMESPACE, localPart="myPart")
    public MyPartResponse handleMyPart(MyPart myPart) {
        ....
    }
}
<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>
我们仅将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>

并在成功的情况下添加一些细节,如:

@Endpoint
public class MyEndpoint() {
    private static final String MY_NAMESPACE=...;

    @PayloadRoot(namespace=MY_NAMESPACE, localPart="myPart")
    public MyPartResponse handleMyPart(MyPart myPart) {
        ....
    }
}
<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错误
最后,这些问题与使用springws的每个poxwebservice相关。如何拦截这些异常并映射到响应对象


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

一种对我很有效的方法是:

对于XSD验证错误,扩展AbstractValidatingInterceptor以提供XSD验证错误的自定义处理,并在Spring上下文中将其设置为validatingInterceptor bean

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

我在这里的博客文章中详细描述了这一点:


-Larry

我刚刚在Spring WS-Jira上提出了一个功能请求: