在mule中显示客户端发送的异常soap错误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

我有一个mule服务,其中包含一个代理服务和客户端。当我向客户端发出请求时,它会引发一些异常。在引发异常时,它会发送一个soap fault xml,其中包含详细信息标记,我需要在响应中显示它。我正在使用soap client中的inInterceptor访问该错误和类使用的是CheckFaultInterceptor。 目前我只能从soap客户端访问错误字符串。但我的要求是访问整个soap错误xml。请帮助我。 我的mule configuration.xml是:

 <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="&quot;document/http://siebel.com/CustomUI:CreateSR1&quot;" />
</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>