如何在Mule Exception-Strategy中处理CXF解组错误

时间:2014-04-10 18:04:59

标签: xml soap cxf mule mule-studio

我是Mule的新手,...我有一个有以下请求的网络服务: -

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://services.test.com/schema/MainData/V1">
   <soapenv:Header/>
   <soapenv:Body>
      <v1:insertDataRequest>
         <v1:Id>6</v1:Id>
         <v1:Name>abc</v1:Name>
         <v1:Age>4</v1:Age>
         <v1:Designation>SE</v1:Designation>
      </v1:insertDataRequest>
   </soapenv:Body>
</soapenv:Envelope>

我的骡子流如下: -

  <flow name="MuleDbInsertFlow1" doc:name="MuleDbInsertFlow1">
            <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8082" path="mainData" doc:name="HTTP"/>
    <cxf:jaxws-service serviceClass="com.test.services.v1.GetCalculation" doc:name="SOAP"/>
            <component class="com.test.services.v1.GetCalculationImpl" doc:name="Java"/>

 <catch-exception-strategy doc:name="Catch Exception Strategy">

   <set-payload value="Error occoured!!!!" doc:name="Set Payload"/>

 </catch-exception-strategy>


</flow>

现在我的问题是在SOAP请求中,ID和AGE属性是整数,如果我放置任何字符串值,如<v1:Id>aaaa</v1:Id>,它会抛出错误,如 org.apache.cxf.interceptor.Fault:Unmarshalling错误:不是数字这很自然......现在我如何处理这个Unmarshalling error并发送自定义消息作为响应...我尝试在Mule中使用catch异常块但是我无法处理此 CXF解组错误

1 个答案:

答案 0 :(得分:1)

对于这种方法,可以使用具有CXF Jaxws服务的拦截器。

以下链接提供了Mule中CXF模块的更多详细信息以及对拦截器的引用。

<cxf:jaxws-service .... ....>
  <cxf:inInterceptors>
    <spring:bean class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
  </cxf:inInterceptors>
  <cxf:outInterceptors>
    <spring:bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
  </cxf:outInterceptors>
</cxf:jaxws-service>

使用Fault Interceptor来控制错误处理。

Mule CXF Module Reference