2016-05-31 120 views
0

如何从骡子的catch-exception-strategy重新抛出异常。Mule从catchexception重新抛出异常

尝试使用下面的流程和来自“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> 

回答

0

flowdemo它是流程(不是子流程),并有自己的catch异常Stratergy(所以它由演示流程本身处理)。线程从正在调用其他流的主流(mdemoFlow)开始通过flowRef,因此返回mainFlow以完成期望的线程(不考虑流处理策略)。如果你想处理主要流程中的所有异常。请使用下面的配置(将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