Soap Fault Details自定义异常

时间:2015-01-26 20:49:22

标签: spring web-services exception soap jaxb

在迁移到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转换为错误消息的详细信息部分。

任何帮助将不胜感激!!!

提前感谢您的帮助!

2 个答案:

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