【问题标题】:Mule rethrow exception from catchexception骡子从 catchexception 重新抛出异常
【发布时间】:2016-05-31 10:53:15
【问题描述】:

如何从 mule 中的 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>

【问题讨论】:

    标签: exception mule try-catch rethrow


    【解决方案1】:

    flowdemo 是流(不是子流)并且有自己的 catch 异常策略(所以它由演示流本身处理)。线程从通过flowRef调用其他流的主流(mdemoFlow)开始,因此它返回主流以完成预期的线程(与流处理策略无关)。如果您想处理主要流程本身中的所有异常。请使用以下配置(将 flowdemo 设置为子流),因此默认情况下,其关联子流中发生的任何异常都将返回其主流来处理。

       <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

    【讨论】:

      猜你喜欢
      • 2011-06-27
      • 1970-01-01
      • 2020-09-17
      • 2016-03-18
      • 2011-10-10
      • 1970-01-01
      • 2012-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多