在迁移到Spring WS并使用wsdl中的JAXB生成Soap消息中使用的对象的过程中。我在尝试将自定义异常放入Soap Fault消息的详细信息字段时遇到问题。以下是如何返回现有故障消息(详细嵌入FooException)。
<env:Envelope xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<env:Header/>
<env:Body>
<env:Fault>
<faultcode>env:Server</faultcode>
<faultstring>Service specific exception: com.test.FooException: Invalid authentication credentials. Please try again.</faultstring>
<detail>
<n1:FooException xsi:type="n1:FooException" xmlns:n1="java:com.test">
<errorCode xsi:type="xsd:int">101</errorCode>
<errorReason xsi:type="xsd:string">InvalidUserCredentials:Invalid authentication credentials. Please try again</errorReason>
</n1:FooException>
</detail>
</env:Fault>
</env:Body>
</env:Envelope>
我在spring config xml文件中设置了一个客户exceptionResolver bean标识符。
<bean id="exceptionResolver" class="com.test.FacadeExceptionHandler">
<property name="order" value="1"></property>
<property name="defaultFault" value="SERVER"/>
<property name="exceptionMappings">
<value> com.test.FooException=SERVER,FaultMsg </value>
</property>
</bean>
我创建了FacadeExceptionHandler并且它正在被调用,但我无法弄清楚如何将FooException转换为错误消息的详细信息部分。
任何帮助将不胜感激!!!
提前感谢您的帮助!
答案 0 :(得分:0)
我认为你几乎得到了所有,在你的FacadeExceptionHandler
中你必须覆盖customizeFault
方法(doc),然后添加错误的详细信息(你的例外情况是参数那里。)
此条目详细解释了Soap Fault消息的所有这些自定义详细信息处理:http://www.stevideter.com/2009/02/18/of-exceptionresolvers-and-xmlbeans/
答案 1 :(得分:0)
你无法在<detail>
元素中使用如此深度的嵌套元素返回SOAP客户端错误,因为Spring SoapFault
的{{1}}列表包含SoapFaultDetail
列表SoapFaultDetailElement
只是String中的详细消息。所以在Spring WS中,SOAP Fault的最大深度细节是 one 。
SoapFaultDetailElement