0

我的要求是在入站端点处理文件

用例 1- 处理文件失败

如果文件由于某些异常(如验证错误)而无法处理,请将文件移动到与源不同的单独目录。删除源目录下的原文件

用例 2 - 成功处理

如果文件处理成功完成,则让文件保留在源目录中。

我尝试了以下方法,文件被移动到失败的目录,但源文件没有按照用例 1 的要求删除。

<flow name="InValidFlow1" doc:name="InValidFlow1">
<file:inbound-endpoint responseTimeout="10000" doc:name="File"  path="c:\filelanding\in2" pollingFrequency="100" connector-ref="input_2" moveToDirectory="c:\filelanding\in2" moveToPattern="#[header:originalFilename]-#[function:dateStamp]-Processed">
<file:filename-regex-filter pattern="(?!.*Processed|.*Failed)(.*)" caseSensitive="false"/>
</file:inbound-endpoint>
<test:component waitTime="20000"></test:component>
<custom-transformer class="com.XXX.XXX.service.ExceptionService" doc:name="Java"/>
<file:outbound-endpoint responseTimeout="10000" doc:name="File" path="c:\filelanding\out2" connector-ref="output_2"/>
<exception-strategy ref="fot_exception_strategy_single" doc:name="Reference Exception Strategy"/>
</flow>
<file:connector name="error_output_1" outputPattern="#[header:originalFilename]" doc:name="File"/>
<choice-exception-strategy name="fot_exception_strategy_single">
<catch-exception-strategy when="#[exception.causedBy(java.lang.RuntimeException)]" doc:name="Catch Exception Strategy">
<!-- Mark the status as failed-->
<file:outbound-endpoint connector-ref="error_output_1" responseTimeout="10000" doc:name="File" path="c:\filelanding\backup2" outputPattern="#[header:originalFilename]-#[function:dateStamp]-Failed" >
</file:outbound-endpoint>
</catch-exception-strategy>
</choice-exception-strategy>

我是否需要覆盖任何现有的骡子功能来实现这种行为。失败的源文件夹不应包含该文件。目标文件夹应具有标记为“失败”状态的文件。

4

1 回答 1

3

对于用例 1,在您的异常策略中,使用originalFilenameMEL 表达式组件中的值将文件移动到您想要的任何位置。

您可以org.mule.util.FileUtils.moveFileWithCopyFallback()为此使用。

PS。#[header:originalFilename]是旧式表达式语法,在 Mule 3.3 及更高版本上使用 MEL #[message.inboundProperties.originalFilename]

于 2013-08-25T16:02:38.560 回答