0

次のフローで SOAP コンポーネントがスローする例外を Mule に記録させようとしています。たとえば、不正な形式の xml を入力として渡すと、soapUI で意味のある出力が得られますが、これをコンソールに記録するか、JMS キューに送信できるようにしたいと考えています。

<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());
    }  
}
4

1 に答える 1

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

于 2013-02-19T15:21:27.737 に答える