2013-02-19 90 views
0

我试图让Mule记录我的SOAP组件在以下流程中引发的异常。例如,如果我将它格式错误的xml作为输入传递给soapUI,我会得到一个有意义的输出,但我希望能够将其记录在控制台中或将其发送到JMS队列。在Mule ESB中记录SOAP错误

<jms:activemq-connector name="Active_MQ" brokerURL="tcp://localhost:61616" validateConnections="true" doc:name="Active MQ"/> 
<flow name="CAB-Mule_WMBFlow1" doc:name="CAB-Mule_WMBFlow1"> 
    <http:inbound-endpoint exchange-pattern="request-response" address="http://localhost:8081/DemoCustomer" doc:name="HTTP" mimeType="text/xml"> 
     <idempotent-redelivery-policy maxRedeliveryCount="3"> 
      <dead-letter-queue> 
       <vm:outbound-endpoint path="error-queue" /> 
      </dead-letter-queue> 
     </idempotent-redelivery-policy> 
    </http:inbound-endpoint> 
    <cxf:jaxws-service port="80" serviceClass="com.mulesoft.demo.DemoCustomer" doc:name="SOAP"/> 
    <component class="com.mulesoft.demo.DemoCustomerIntImpl" doc:name="Java"/> 
    <jms:outbound-endpoint queue="StudioIN" connector-ref="Active_MQ" doc:name="JMS"/> 
    <logger level="INFO" doc:name="Logger" message="Payload: #[payload]"/> 
</flow> 
<flow name="error" doc:name="error"> 
    <component class="com.mulesoft.demo.ExceptionService" doc:name="Java"/> 
    <jms:outbound-endpoint queue="Error" connector-ref="Active_MQ" doc:name="JMS"/> 
</flow> 

ExceptionService就是:

public class ExceptionService { 
    public void onException(ExceptionMessage e) { 
     System.err.println("EXCEPTION MESSAGE:::: " + e.getException().getMessage()); 
    } 
} 

回答

0

定义<catch-exception-strategy>CAB-Mule_WMBFlow1结束前,像这样和日志,推动该错误消息。JMS队列

<flow name="CAB-Mule_WMBFlow1" doc:name="CAB-Mule_WMBFlow1"> 
    <http:inbound-endpoint exchange-pattern="request-response" address="http://localhost:8081/DemoCustomer" doc:name="HTTP" mimeType="text/xml"> 
     <idempotent-redelivery-policy maxRedeliveryCount="3"> 
      <dead-letter-queue> 
       <vm:outbound-endpoint path="error-queue" /> 
      </dead-letter-queue> 
     </idempotent-redelivery-policy> 
    </http:inbound-endpoint> 
    <cxf:jaxws-service port="80" serviceClass="com.mulesoft.demo.DemoCustomer" doc:name="SOAP"/> 
    <component class="com.mulesoft.demo.DemoCustomerIntImpl" doc:name="Java"/> 
    <jms:outbound-endpoint queue="StudioIN" connector-ref="Active_MQ" doc:name="JMS"/> 
    <logger level="INFO" doc:name="Logger" message="Payload: #[payload]"/> 

    <catch-exception-strategy> 
     <logger level="INFO" message="---->Exception payload is: #[payload]"/> 
     <jms:outbound-endpoint queue="Error" /> 
    </catch-exception-strategy> 
</flow> 

此外,您可以使用message.getExceptionPayload().getMessage()在java组件中获取异常消息并在控制台上输出,消息类型为MuleMessage

+0

似乎没有为我工作,我没有得到记录器消息到控制台和错误队列也没有得到任何消息。我是否也必须设置全球例外策略? – 2013-02-19 22:21:35