0

ミュールの catch-exception-strategy からどのように例外を再スローできますか。

以下のフローで試してみましたが、「flowdemo」エラー処理から例外が発生した後、mdemoflow のエラー処理に進みません。flow-ref の後にあるロガーを実行します。

<mule  ....>
    <sub-flow name="exceFlow">
        <logger level="ERROR" doc:name="Logger"/>
        <expression-component doc:name="Expression"><![CDATA[throw new java.lang.IllegalArgumentException('bad arg');]]></expression-component>
        <validation:is-true expression="false" doc:name="Validation"/>
        <scripting:component doc:name="Script">
            <scripting:script engine="Groovy"><![CDATA[throw new java.lang.IllegalArgumentException('bad arg')]]></scripting:script>
        </scripting:component>
        <logger level="INFO" doc:name="Logger"/>
    </sub-flow>
    <flow name="flowdemo" processingStrategy="synchronous">
        <expression-component doc:name="Expression"><![CDATA[flowVars.dummy = flowVars.fake.test]]></expression-component>
        <catch-exception-strategy doc:name="Catch Exception Strategy"  >
            <flow-ref name="exceFlow" doc:name="Flow Reference"/>
        </catch-exception-strategy>
    </flow>
    <flow name="mdemoFlow" processingStrategy="synchronous">
        <poll doc:name="Poll">
            <fixed-frequency-scheduler frequency="3" timeUnit="MINUTES"/>
            <logger level="INFO" doc:name="Logger"/>
        </poll>
        <flow-ref name="flowdemo" doc:name="flowdemo"/>
        <logger level="INFO" doc:name="Logger"/>
        <catch-exception-strategy doc:name="Catch Exception Strategy">
            <logger message="test logging in error" level="ERROR" doc:name="Logger"/>
            <logger level="INFO" doc:name="Logger"/>
        </catch-exception-strategy>
    </flow>
</mule>
4

1 に答える 1

0

フロー(サブフローではない)であり、独自のキャッチ例外戦略を持っているflowdemo(したがって、デモフロー自体によって処理されています)。スレッドは、flowRef を介して他のフローを呼び出しているメイン フロー (mdemoFlow) から開始されたため、予想されるスレッドを完了するために mainFlow に戻ります (フロー処理戦略に関係なく)。メインフロー自体ですべての例外を処理したい場合。以下の構成 (フローデモをサブフローとして作成) を使用してください。デフォルトでは、関連付けられたサブフローで例外が発生すると、メイン フローに戻って同じ処理が行われます。

   <sub-flow name="flowdemo" >
    <expression-component doc:name="Expression"><![CDATA[flowVars.dummy = flowVars.fake.test]]></expression-component>
</sub-flow>
<flow name="mdemoFlow" processingStrategy="synchronous">
    <poll doc:name="Poll">
        <fixed-frequency-scheduler frequency="3" timeUnit="MINUTES"/>
        <logger level="INFO" doc:name="Logger"/>
    </poll>
    <flow-ref name="flowdemo" doc:name="flowdemo"/>
    <logger level="INFO" doc:name="Logger" message="***final logger***"/>
    <catch-exception-strategy doc:name="Catch Exception Strategy">
        <logger message="test logging in error" level="ERROR" doc:name="Logger"/>
        <logger level="INFO" doc:name="Logger"/>
        <flow-ref name="exceFlow" doc:name="Flow Reference"/>
    </catch-exception-strategy>
</flow>
<sub-flow name="exceFlow">
    <logger level="ERROR" doc:name="Logger"/>
    <logger level="INFO" doc:name="Logger"/>
</sub-flow>

例外戦略をグローバルにする。グローバル例外戦略を使用し、参照例外戦略を介して同じものを呼び出すことができます。詳細については、リンクを参照してくださいhttps://docs.mulesoft.com/mule-user-guide/v/3.7/reference-exception-strategy

于 2016-05-31T22:07:15.127 に答える