0

How do exception can be rethrow from catch-exception-strategy in mule.

Tried with below flows and after an exception from "flowdemo" errorhandling, it doesn't go to errorhandling of mdemoflow. it executes logger that is place after 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>

1 Answers1

0

flowdemo which is flow ( Not a subflow) and has its own catch Exception Stratergy(So it is being handled by the demo flow itself). Thread started from main flow (mdemoFlow) which is calling other flow Via flowRef hence it is back to the mainFlow to complete the thread which is expected(Irrespective of flow processing strategy). If you want to handled all the exception in the main flow itself. Please use the below config ( Make the flowdemo as subflow), so by default any exception happen in its associated subflow will be back to its main flow to handle the same.

   <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>

To make Exception strategy as Global. You can use global exception strategy and call the same via reference Exception strategy. Please refer the link for more details https://docs.mulesoft.com/mule-user-guide/v/3.7/reference-exception-strategy

star
  • 1,493
  • 1
  • 28
  • 61