2012-09-26 5 views
2

뮬 3.3.0
페이로드를 분할하는 플로우가 있습니다.
그런 다음 각 항목은 사용자 지정 변환기를 거쳐 항목이 잘못 구성된 경우 예외를 throw합니다.
오류 항목을 파일에 기록하는 catch 예외 전략이 있습니다.
나는 나머지 부분을 처리하는 흐름을 계속하고 싶다. 내가 아는 한 예상 된 동작이어야한다.
문제는 흐름이 중지된다는 것입니다.
예외 후에도 뮬 (3.3) 플로우 계속

간단한 테스트 파일을 사용하여 간단한 테스트 플로우를 첨부하고 있습니다. 파일은 2 줄의 csv 파일이며 각 줄에는 3 개의 입력란이 있습니다. Im 그루비 스크립트를 사용하여 파일을 처음으로 파일로 분할 한 다음 각 줄을 필드로 분할합니다. 필드가 잘못된 경우에도 예외를 시뮬레이트하기 위해 그루비 스크립트를 사용하고 있습니다. 이 경우 필드가 "goodbye"라는 단어이면 RuntimeException을 발생시킵니다. 이 흐름을 테스트하면 예외 이후 나머지 필드가 처리되지 않는다는 것을 알 수 있습니다 (이 경우 로그인 됨). 이 예제에서는 catch 예외 stragegy가 실행되지 않습니다.

입력 파일 :

hello,cruel,world 
goodbye,cruel,world

TestFlow

TestFlow

내가 먼저 어떻게 할 것인지

<?xml version="1.0" encoding="UTF-8"?> 

<mule xmlns:scripting="http://www.mulesoft.org/schema/mule/scripting" xmlns:file="http://www.mulesoft.org/schema/mule/file" 
    xmlns:vm="http://www.mulesoft.org/schema/mule/vm" xmlns="http://www.mulesoft.org/schema/mule/core" 
    xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" 
    xmlns:spring="http://www.springframework.org/schema/beans" version="CE-3.3.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation=" 
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd 
http://www.mulesoft.org/schema/mule/scripting http://www.mulesoft.org/schema/mule/scripting/current/mule-scripting.xsd 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd 
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd 
http://www.mulesoft.org/schema/mule/vm http://www.mulesoft.org/schema/mule/vm/current/mule-vm.xsd "> 

    <file:connector name="inputFileConnector" autoDelete="true" 
     streaming="false" validateConnections="true" doc:name="File" fileAge="60000" 
     readFromDirectory="#{systemProperties['user.home']}"/> 
    <catch-exception-strategy name="Catch_Exception_Strategy"> 
     <logger message="!!!!! Exception Handler !!!!!" level="INFO" doc:name="Logger"/> 
    </catch-exception-strategy> 

    <flow name="TestCaseFlow1" doc:name="TestCaseFlow1"> 
     <file:inbound-endpoint path="#{systemProperties['user.home']}" 
      responseTimeout="10000" doc:name="Input File" fileAge="100" connector-ref="inputFileConnector"> 
      <file:filename-regex-filter pattern="input.csv" 
       caseSensitive="false" /> 
     </file:inbound-endpoint> 
     <byte-array-to-string-transformer doc:name="Byte Array to String"/> 
     <scripting:component doc:name="Groovy"> 
      <scripting:script engine="Groovy"> 
       <scripting:text><![CDATA[return payload.split('\n');]]></scripting:text> 
      </scripting:script> 
     </scripting:component> 
     <collection-splitter doc:name="Collection Splitter"/> 
     <scripting:component doc:name="Groovy"> 
      <scripting:script engine="Groovy"> 
       <scripting:text><![CDATA[return payload.split(',');]]></scripting:text> 
      </scripting:script> 
     </scripting:component> 
     <collection-splitter doc:name="Collection Splitter"/> 
     <scripting:component doc:name="Groovy"> 
      <scripting:script engine="Groovy"> 
       <scripting:text><![CDATA[if (payload.equals('goodbye')) { 
          throw new java.lang.RuntimeException('Dang!'); 
         } 
         return payload]]></scripting:text> 
      </scripting:script> 
     </scripting:component> 
     <logger message=">>>>>>>>>>>>>>>>>> #[payload]" level="INFO" doc:name="Logger" /> 
    </flow> 
</mule> 
+0

페이로드는 개체의 컬렉션입니까? 설정을 게시 할 수 있습니까? – Daniel

답변

4

이 주 흐름 별도 TestCase.mflow. collection-splitter마다 JMS 또는 VM outbound-endpoint을 넣은 후 모든 메시지가 자체 스레드를 가지며 실패 할 경우 다른 메시지는 영향을받지 않습니다.

<flow name="flow1"> 
    <file:inbound-endpoint path="#{systemProperties['user.home']}" 
     responseTimeout="10000" doc:name="Input File" fileAge="100" connector-ref="inputFileConnector"> 
     <file:filename-regex-filter pattern="input.csv" 
     caseSensitive="false" /> 
    </file:inbound-endpoint> 
    <byte-array-to-string-transformer doc:name="Byte Array to String"/> 
    <scripting:component doc:name="Groovy"> 
     <scripting:script engine="Groovy"> 
     <scripting:text><![CDATA[return payload.split('\n');]]></scripting:text> 
     </scripting:script> 
    </scripting:component> 
    <collection-splitter doc:name="Collection Splitter"/> 
    <vm:outbound-endpoint path="toFlow2"/> 
</flow> 

<flow name="flow2"> 
    <vm:inbound-endpoint path="toFlow2"/> 
    <scripting:component doc:name="Groovy"> 
     <scripting:script engine="Groovy"> 
     <scripting:text><![CDATA[return payload.split(',');]]></scripting:text> 
     </scripting:script> 
    </scripting:component> 
    <collection-splitter doc:name="Collection Splitter"/> 
    <vm:outbound-endpoint path="toFlow3"/> 
</flow> 

<flow name="flow3"> 
    <vm:inbound-endpoint path="toFlow3"/> 
    <scripting:component doc:name="Groovy"> 
     <scripting:script engine="Groovy"> 
     <scripting:text><![CDATA[if (payload.equals('goodbye')) { 
       throw new java.lang.RuntimeException('Dang!'); 
      } 
      return payload]]></scripting:text> 
     </scripting:script> 
    </scripting:component> 
    <logger message=">>>>>>>>>>>>>>>>>> #[payload]" level="INFO" doc:name="Logger" /> 
</flow> 
+0

환상적입니다. 대니얼에게 감사드립니다. 나는 Mule 문서가 더 나은 것을 희망한다. – pakman

관련 문제