1

外部ベンダーの Web サービスを呼び出すときに、タイムアウト例外 (またはそのための他の例外) をシミュレートしています。フローの開始時に元のペイロードを保存し、catch-exception-strategy でペイロードを元のペイロードに置き換えます。ペイロードが正常に置き換えられ、XSLT トランスフォーマーが正常に適用され、変換されたペイロードが送信ファイルに正常にコピーされますが、奇妙なことに、JMS は空のメッセージを取得します (ただし、メッセージ プロパティはそのままです)。とを使用Mule 3.3.1ActiveMQます。Active MQ を次のように置き換えても、結果は同じです。Sonic

<flow name="orderRequirementsToVendor">
        <jms:inbound-endpoint queue="order.vendor" />
        <set-variable variableName="originalPayload" value="#[message.payload]" />
        <outbound-endpoint address="${vendor.ws.url}" mimeType="text/xml" connector-ref="https.connector" responseTimeout="100">
            <cxf:proxy-client payload="body" enableMuleSoapHeaders="false">
                <cxf:inInterceptors>
                    <spring:bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
                </cxf:inInterceptors>
                <cxf:outInterceptors>
                    <spring:bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
                </cxf:outInterceptors>
            </cxf:proxy-client>
        </outbound-endpoint>
        .
            .
            .

        <choice-exception-strategy>
            <catch-exception-strategy>
                <logger message="In catch exception strategy. Unknown Exception" level="ERROR" /> 
                <logger message="#[exception.causeException]" level="ERROR" />
                <set-payload value="#[flowVars.originalPayload]"/>
                <set-property propertyName="exception" value="#[exception.summaryMessage]"/>                
                <transformer ref="generalErrorTransformer" />   
                <file:outbound-endpoint path="/outbound/vendor/error/ack-before" outputPattern="out_vendor_transformed_ack_error_beforeStatusQueue[function:dateStamp].xml" />
                <jms:outbound-endpoint queue="order.status" /> 
                <file:outbound-endpoint path="/outbound/vendor/error/ack-after" outputPattern="out_vendor_transformed_ack_error_afterStatusQueue[function:dateStamp].xml" />                    
            </catch-exception-strategy>
        </choice-exception-strategy>        
    </flow> 

との両方ack-beforeack-after正しいペイロードが含まれるファイルがありますが、メッセージは order.status で受信されましたが空です

編集: これは私のログの例外です

2013-05-29 09:12:33,864 ERROR [orderRequirementsToVendor.stage1.02] exception.AbstractExceptionListener (AbstractExceptionListener.java:299) - 
********************************************************************************
Message               : COULD_NOT_READ_XML_STREAM. Failed to route event via endpoint: org.mule.module.cxf.CxfOutboundMessageProcessor. Message payload is of type: PostMethod
Code                  : MULE_ERROR-42999
--------------------------------------------------------------------------------
Exception stack is:
1. Read timed out (java.net.SocketTimeoutException)
  java.net.SocketInputStream:-2 (null)
2. Read timed out (com.ctc.wstx.exc.WstxIOException)
  com.ctc.wstx.sw.BaseNsStreamWriter:617 (null)
3. COULD_NOT_READ_XML_STREAM (org.apache.cxf.interceptor.Fault)
  org.apache.cxf.databinding.stax.StaxDataBinding$XMLStreamDataWriter:133 (null)
4. COULD_NOT_READ_XML_STREAM. Failed to route event via endpoint: org.mule.module.cxf.CxfOutboundMessageProcessor. Message payload is of type: PostMethod (org.mule.api.transport.DispatchException)
  org.mule.module.cxf.CxfOutboundMessageProcessor:144 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transport/DispatchException.html)
--------------------------------------------------------------------------------
Root Exception stack trace:
java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:129)
    at com.sun.net.ssl.internal.ssl.InputRecord.readFully(InputRecord.java:293)
    + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************
4

0 に答える 0