当mule soap异常发生时,如何发送自己的错误代码和错误字符串,而不是一般的soap错误消息?

当mule soap异常发生时,如何发送自己的错误代码和错误字符串,而不是一般的soap错误消息?,soap,mule,Soap,Mule,我在用骡子打肥皂电话。我使用默认异常策略捕获异常。 发生异常时,如何发送自己的故障代码和故障字符串,而不是一般的soap故障消息?谢谢 下面是MuleXML的片段、java代码、实际输出和预期输出 Mule-xml Java代码 package.com.managers; 导入org.mule.api.MuleMessage; 导入org.mule.api.transformer.TransformerException; 导入org.mule.message.ExceptionMessag

我在用骡子打肥皂电话。我使用默认异常策略捕获异常。 发生异常时,如何发送自己的故障代码和故障字符串,而不是一般的soap故障消息?谢谢

下面是MuleXML的片段、java代码、实际输出和预期输出

Mule-xml

Java代码
package.com.managers;
导入org.mule.api.MuleMessage;
导入org.mule.api.transformer.TransformerException;
导入org.mule.message.ExceptionMessage;
导入org.mule.transformer.AbstractMessageTransformer;
公共类CustomExceptionHandler扩展了AbstractMessageTransformer{
公共CustomExceptionHandler(){
setName(“CustomExceptionHandler”);
}
@凌驾
公共对象转换消息(多消息消息、字符串输出编码)
抛出TransformerException{
ExceptionMessage ExceptionMessage=(ExceptionMessage)message.getPayload();
String outputMessage=“”
+“soap:服务器”
+ ""
+“发生意外错误。请与您的服务台联系,并引用此错误\”“+异常消息。getException()+”\”“+”;
返回输出消息;
}
}
实际产量

soap:服务器
发票。无法通过终结点org.mule.module.cxf.CxfOutboundMessageProcessor路由事件。消息负载的类型为:PostMethod
预期产量

soap:服务器
发生了意外错误。请联系您的服务台并引用此错误“org.mule.api.transport.DispatchException:dt invoice.未能通过端点路由事件:org.mule.module.cxf.CxfOutboundMessageProcessor。消息负载的类型为:PostMethod”

您需要
如下更新流以开始使用捕获异常策略

<flow name="addressSearchFlow1" doc:name="addressSearchFlow1">
    <invoke object-ref="InvoiceManager" method="completeSearchObject"
        methodArguments="#[message.payload]"></invoke>

    <logger level="INFO" doc:name="Logger" />

    <processor-chain doc:name="Search Processor Chain">
        <cxf:jaxws-client operation="doSearch"
            clientClass="com.invoice.web_2007_09.ProWeb" port="InvoicePortType"
            wsdlLocation="proweb.wsdl" enableMuleSoapHeaders="true" doc:name="SOAP">
        </cxf:jaxws-client>
        <http:outbound-endpoint exchange-pattern="request-response"
            method="POST" ref="InvoiceEndPoint" doc:name="HTTP" />
    </processor-chain>

    <catch-exception-strategy>          
        <logger message="Exception_logger" level="INFO" doc:name="Exception_logger" />
        <custom-transformer class="com.managers.CustomExceptionHandler" />
        <logger message="Exception_logger" level="INFO" doc:name="Exception_logger" />          
    </catch-exception-strategy>
</flow>

同样在自定义转换器中,异常不作为有效负载出现在消息中。它在exceptionPayload中可用。因此,请使用message.getExceptionPayload(),它将为您提供ExceptionPayload作为结果。从exceptionPayload对象可以获得异常消息和其他详细信息


希望这能有所帮助。

我尝试为“invoke”元素查找适当的Mule文档。是否只有我一个人,或者这个元素缺少适当的文档?
package com.managers;

import org.mule.api.MuleMessage;
import org.mule.api.transformer.TransformerException;
import org.mule.message.ExceptionMessage;
import org.mule.transformer.AbstractMessageTransformer;

public class CustomExceptionHandler extends AbstractMessageTransformer {

public CustomExceptionHandler() {
    setName("CustomExceptionHandler");
}

@Override
public Object transformMessage(MuleMessage message, String outputEncoding)
        throws TransformerException {

    ExceptionMessage exceptionMessage = (ExceptionMessage)message.getPayload();

    String outputMessage = "<soap:Fault xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">        "
            + " <faultcode>soap:Server</faultcode> "
            + "<faultstring>"
            + "An unexpected error has occured. Please contact your service desk and quote this error \""  + exceptionMessage.getException() +  "\""+ "</faultstring>      " + "</soap:Fault>";
    return outputMessage;

}

}
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <soap:Fault>
         <faultcode>soap:Server</faultcode>
         <faultstring> dt-invoice. Failed to route event via endpoint: org.mule.module.cxf.CxfOutboundMessageProcessor. Message payload is of type: PostMethod</faultstring>
      </soap:Fault>
   </soap:Body>
</soap:Envelope>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <soap:Fault>
         <faultcode>soap:Server</faultcode>
         <faultstring> An unexpected error has occured. Please contact your service desk and quote this error   "org.mule.api.transport.DispatchException: dt-invoice. Failed to route event via endpoint: org.mule.module.cxf.CxfOutboundMessageProcessor. Message payload is of type: PostMethod"
</faultstring>
      </soap:Fault>
   </soap:Body>
</soap:Envelope>
<flow name="addressSearchFlow1" doc:name="addressSearchFlow1">
    <invoke object-ref="InvoiceManager" method="completeSearchObject"
        methodArguments="#[message.payload]"></invoke>

    <logger level="INFO" doc:name="Logger" />

    <processor-chain doc:name="Search Processor Chain">
        <cxf:jaxws-client operation="doSearch"
            clientClass="com.invoice.web_2007_09.ProWeb" port="InvoicePortType"
            wsdlLocation="proweb.wsdl" enableMuleSoapHeaders="true" doc:name="SOAP">
        </cxf:jaxws-client>
        <http:outbound-endpoint exchange-pattern="request-response"
            method="POST" ref="InvoiceEndPoint" doc:name="HTTP" />
    </processor-chain>

    <catch-exception-strategy>
        <processor-chain>
            <logger message="Exception_logger" level="INFO" doc:name="Exception_logger" />
            <custom-transformer class="com.managers.CustomExceptionHandler" />
            <logger message="Exception_logger" level="INFO" doc:name="Exception_logger" />
        </processor-chain>
    </catch-exception-strategy>

</flow>
<flow name="addressSearchFlow1" doc:name="addressSearchFlow1">
    <invoke object-ref="InvoiceManager" method="completeSearchObject"
        methodArguments="#[message.payload]"></invoke>

    <logger level="INFO" doc:name="Logger" />

    <processor-chain doc:name="Search Processor Chain">
        <cxf:jaxws-client operation="doSearch"
            clientClass="com.invoice.web_2007_09.ProWeb" port="InvoicePortType"
            wsdlLocation="proweb.wsdl" enableMuleSoapHeaders="true" doc:name="SOAP">
        </cxf:jaxws-client>
        <http:outbound-endpoint exchange-pattern="request-response"
            method="POST" ref="InvoiceEndPoint" doc:name="HTTP" />
    </processor-chain>

    <catch-exception-strategy>          
        <logger message="Exception_logger" level="INFO" doc:name="Exception_logger" />
        <custom-transformer class="com.managers.CustomExceptionHandler" />
        <logger message="Exception_logger" level="INFO" doc:name="Exception_logger" />          
    </catch-exception-strategy>
</flow>