2016-05-31 121 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