2016-05-31 14 views
0

노새의 catch-exception-strategy에서 예외를 어떻게 다시 발생시킬 수 있습니까?노새는 catchexception에서 예외를 다시 발생합니다.

"flowdemo"오류 처리 예외가 발생하면 mdemoflow 오류 처리를 시도하지 않습니다. flow-ref 다음에있는 로거를 실행합니다. 흐름 (아니 서브 플로우)과 자신의 캐치 예외 Stratergy을 가지고

<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는 (그래서는 데모 자체의 흐름에 의해 처리되고있다). Thread는 main flow (mdemoFlow)에서 시작하여 flowRef를 통해 다른 플로우를 호출합니다. 따라서 mainFlow로 돌아가 예상되는 스레드를 완료합니다 (플로우 처리 전략과 무관하게). 기본 흐름 자체에서 모든 예외를 처리하려는 경우 아래의 config (flowflow를 서브 플로우로 만드십시오)를 사용하십시오. 따라서 기본적으로 연관된 서브 플로우에서 발생하는 모든 예외는 동일한 서브 플로우를 처리하기 위해 메인 플로우로 돌아갑니다.

<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