Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mule ESB Community Edition 3.4 - prevent from deleting original file

Tags:

ftp

mule

I managed to set up a Mule project to download a file from a FTP, and save it on a local disk. However after transferring the file, Mule keeps trying to delete the remote file on the FTP. Is there a way to tell Mule not to delete the original file and just leave it as it is?

Here's my project 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>

And in my case, I don't have the rights to delete the file so I get an exception:

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)
like image 243
merejy Avatar asked Mar 23 '23 20:03

merejy


1 Answers

Your only option consists in extending org.mule.transport.ftp.FtpMessageReceiver in order to override the postProcess method, which is the one that takes care of deleting the file on the FTP server.

To register your custom FtpMessageReceiver use the service-overrides configuration element on your FTP connector:

<ftp:connector name="nonDeletingFtpConnector">
    <service-overrides messageReceiver="com.amce.NonDeletingFtpMessageReceiver" />
</ftp:connector>
like image 91
David Dossot Avatar answered Apr 28 '23 16:04

David Dossot