在mule中显示客户端发送的异常soap错误xml
我有一个mule服务,其中包含一个代理服务和客户端。当我向客户端发出请求时,它会引发一些异常。在引发异常时,它会发送一个soap fault xml,其中包含详细信息标记,我需要在响应中显示它。我正在使用soap client中的inInterceptor访问该错误和类使用的是CheckFaultInterceptor。 目前我只能从soap客户端访问错误字符串。但我的要求是访问整个soap错误xml。请帮助我。 我的mule configuration.xml是:在mule中显示客户端发送的异常soap错误xml,mule,soap-client,mule-studio,Mule,Soap Client,Mule Studio,我有一个mule服务,其中包含一个代理服务和客户端。当我向客户端发出请求时,它会引发一些异常。在引发异常时,它会发送一个soap fault xml,其中包含详细信息标记,我需要在响应中显示它。我正在使用soap client中的inInterceptor访问该错误和类使用的是CheckFaultInterceptor。 目前我只能从soap客户端访问错误字符串。但我的要求是访问整个soap错误xml。请帮助我。 我的mule configuration.xml是: <context:p
<context:property-placeholder location="SrvcReq_Gtwy.properties" />
<spring:beans>
<spring:bean id="CreateSRFaultInterceptor" name="CreateSRFaultInterceptor"
class="org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor" />
</spring:beans>
<message-properties-transformer name="AddSoapActionHeader"
overwrite="true" doc:name="Message Properties">
<add-message-property key="SOAPAction"
value=""document/http://siebel.com/CustomUI:CreateSR1"" />
</message-properties-transformer>
<mulexml:namespace-manager
includeConfigNamespaces="true">
<mulexml:namespace prefix="srv"
uri="http://bac.com/wsdl/CIPT/20130923/SrvcRqstMsg" />
<mulexml:namespace prefix="srv1"
uri="http://bac.com/xsd/CIPT/20130923/SrvcRqstMsg" />
</mulexml:namespace-manager>
<flow name="CreateSrvcReqFlow" doc:name="CreateSrvcReqFlow">
<vm:inbound-endpoint exchange-pattern="request-response"
path="vm:CreateSrvcReq" doc:name="ReceiveMsgForCreateSR" />
<component
class="com.bac.gwb.credit.servicerequest.transformers.CreateServiceRequestIntializer"
doc:name="InitializeVariables" />
<data-mapper:transform config-ref="PojoToGSSReq_grf"
doc:name="PojoToGSSReq" />
<byte-array-to-string-transformer
doc:name="Byte Array to String" />
<logger level="INFO" doc:name="Logger"
message="ArchivedInvoice Message Payload after transformation is #[message.payload]" />
<object-to-string-transformer doc:name="Object to String" />
<flow-ref name="CreateSrvcReqGSSInvocation" doc:name="CreateSRInvocation" />
<mulexml:dom-to-xml-transformer
returnClass="java.lang.String" doc:name="DOM to XML"></mulexml:dom-to-xml-transformer>
<logger message="GSS - Response MSG #[message.payload]" level="INFO"
doc:name="Logger" />
<byte-array-to-string-transformer
doc:name="Byte Array to String" />
<logger level="INFO" doc:name="Logger" />
<choice-exception-strategy doc:name="Choice_Exception_Strategy1">
<catch-exception-strategy
when="#[exception.causedBy(java.net.SocketTimeoutException)]"
doc:name="Catch Exception Strategy">
<processor-chain doc:name="Processor Chain">
<logger message="Exception is - #[exception] " level="INFO"
doc:name="Logger" />
<data-mapper:transform config-ref="pojo_to_json"
doc:name="CreateSoapFaultDM">
<data-mapper:input-arguments>
<data-mapper:input-argument key="CreateSoapFault">#[exception]
</data-mapper:input-argument>
</data-mapper:input-arguments>
</data-mapper:transform>
<byte-array-to-string-transformer
doc:name="Byte Array to String" />
</processor-chain>
</catch-exception-strategy>
<catch-exception-strategy doc:name="Catch Exception Strategy">
<processor-chain doc:name="Processor Chain">
<logger message="Exception is Other - #[exception] " level="INFO"
doc:name="Logger" />
<data-mapper:transform config-ref="createsoapfaultotherdm_grf"
doc:name="DataMapper">
<data-mapper:input-arguments>
<data-mapper:input-argument key="CreateSoapFaultException">#[exception]
</data-mapper:input-argument>
</data-mapper:input-arguments>
</data-mapper:transform>
<byte-array-to-string-transformer
doc:name="Byte Array to String" />
</processor-chain>
</catch-exception-strategy>
</choice-exception-strategy>
</flow>
<flow name="CreateSrvcReqGSSInvocation" doc:name="CreateSrvcReqGSSInvocation">
<mulexml:dom-to-xml-transformer
returnClass="java.lang.String" doc:name="DOM to XML" />
<logger message="Request to GSS #[message.payload]" level="INFO"
doc:name="Logger" />
<cxf:proxy-client doc:name="SOAP"
enableMuleSoapHeaders="true" payload="envelope">
<cxf:inInterceptors>
<spring:ref bean="CreateSRFaultInterceptor" />
</cxf:inInterceptors>
</cxf:proxy-client>
<mulexml:dom-to-xml-transformer>
doc:name="DOM to XML"
</mulexml:dom-to-xml-transformer>
<http:outbound-endpoint exchange-pattern="request-response"
method="POST" address="${outbound.gss.sr}" transformer-refs="AddSoapActionHeader"
doc:name="InvokeGSSCreateSR" responseTimeout="${outbound.gss.sr.responseTimeOutInMillisec}" />
</flow>
在代理客户端中避免拦截器将有助于解决此情况 请参见修改后的流。这将为您提供HTTP出站调用的总soap错误响应
希望这能有所帮助。您好,我已经尝试了您的解决方案,但soap fault xml正在有效负载中出现,mule没有将其识别为错误并将其发送到有效负载中的剩余流。我该如何告诉mule这是soap fault soap fault也是一种适当的响应,mule不会将其视为异常。您可以使用选项检查响应是否为SOAP错误,然后执行所需操作。是的,目前我正在使用选项块并通过xpath表达式检查是否为SOAP错误。如果是SOAP错误xml,则我将其路由以显示错误xml,否则我将显示正确的结果。谢谢
<flow name="CreateSrvcReqGSSInvocation" doc:name="CreateSrvcReqGSSInvocation">
<mulexml:dom-to-xml-transformer
returnClass="java.lang.String" doc:name="DOM to XML" />
<logger message="Request to GSS #[message.payload]" level="INFO"
doc:name="Logger" />
<cxf:proxy-client doc:name="SOAP"
enableMuleSoapHeaders="true" payload="envelope">
</cxf:proxy-client>
<mulexml:dom-to-xml-transformer>
doc:name="DOM to XML"
</mulexml:dom-to-xml-transformer>
<http:outbound-endpoint exchange-pattern="request-response"
method="POST" address="${outbound.gss.sr}" transformer-refs="AddSoapActionHeader"
doc:name="InvokeGSSCreateSR" responseTimeout="${outbound.gss.sr.responseTimeOutInMillisec}" />
</flow>