我是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解组错误
答案 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来控制错误处理。