Mule ESB Community Edition 3.4 - 防止删除原始文件

时间:2013-05-24 15:43:43

标签: ftp mule

我设法建立一个Mule项目,从FTP下载文件,并将其保存在本地磁盘上。但是,在传输文件后,Mule一直试图删除FTP上的远程文件。 有没有办法告诉Mule不要删除原始文件,只是保持原样?

这是我的项目XML:

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

    <flow name="copy-remote-fileFlow1" doc:name="copy-remote-fileFlow1">
        <ftp:inbound-endpoint host="ftp.secureftp-test.com" port="21" path="subdir1" user="test" password="test" pollingFrequency="60000" responseTimeout="10000" doc:name="FTP">
            <file:filename-wildcard-filter pattern="box.ico" />
        </ftp:inbound-endpoint>
        <file:outbound-endpoint path="I:\test\" outputPattern="fromMule.ico" responseTimeout="10000"
 doc:name="File" />     </flow>

 </mule>

在我的情况下,我没有删除文件的权限,所以我得到一个例外:

ERROR 2013-05-24 17:35:47,286 [[copy-remote-file].connector.ftp.mule.default.receiver.02] org.mule.exception.DefaultSystemExceptionStrategy: Caught exception in Exception Strategy: Failed to delete file box.ico. Ftp error: 550
java.io.IOException: Failed to delete file box.ico. Ftp error: 550
    at org.mule.transport.ftp.FtpMessageReceiver.postProcess(FtpMessageReceiver.java:202)
    at com.mulesoft.mule.transport.ftp.EEFtpMessageReceiver.postProcess(EEFtpMessageReceiver.java:71)
    at org.mule.transport.ftp.FtpMessageReceiver$FtpWork.run(FtpMessageReceiver.java:316)
    at org.mule.work.WorkerContext.run(WorkerContext.java:311)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

3 个答案:

答案 0 :(得分:6)

您唯一的选择是扩展org.mule.transport.ftp.FtpMessageReceiver以覆盖postProcess方法,该方法负责删除FTP服务器上的文件。

要注册自定义FtpMessageReceiver,请使用FTP连接器上的service-overrides配置元素:

<ftp:connector name="nonDeletingFtpConnector">
    <service-overrides messageReceiver="com.amce.NonDeletingFtpMessageReceiver" />
</ftp:connector>

答案 1 :(得分:1)

在大卫已经提到的内容中加入一些东西。 NonDeletingFtpMessageReceiver类构造函数应如下所示:

public NonDeletingFtpMessageReceiver(EEFtpConnector connector,
        Flow flowConstruct, DefaultInboundEndpoint endpoint,
        long frequency, String value1, String value2, long value3)
        throws CreateException {
    super(connector, flowConstruct, endpoint, frequency);

}

答案 2 :(得分:0)

另一种解决方案是在FTP连接器上设置streaming="true",这将禁用文件删除。