Mule 3.3.0
ペイロードを分割するフローがあります。
次に、各アイテムがカスタム トランスフォーマーを通過し、アイテムの形式が正しくない場合に例外がスローされる可能性があります。
エラー項目をファイルに記録するためのキャッチ例外戦略があります。
私が知る限り、予想される動作であるはずの残りのアイテムの処理をフローで続行したいと思います。
問題は、流れが止まるということです。
簡単なテスト ファイルと一緒に簡単なテスト フローを添付します。このファイルは 2 行の csv ファイルで、各行には 3 つのフィールドがあります。Groovy スクリプトを使用して、最初にファイルを行に分割し、次に各行をフィールドに分割します。また、Groovy スクリプトを使用して、フィールドの形式が正しくない場合の例外をシミュレートしています。この場合、フィールドが「さようなら」という単語の場合、RuntimeException がスローされます。このフローをテストすると、例外の後の残りのフィールドが処理されない (つまり、この場合はログに記録される) ことがわかります。この特定の例では、catch Exception 戦略は起動さえしません。
入力ファイル:
こんにちは、残酷な世界 さようなら残酷な世界
テストフロー
TestCase.mflow
<?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>