Uploaded image for project: 'Camel'
  1. Camel
  2. CAMEL-11754

Apache Camel FTP getting Cannot retrieve file: RemoteFile error

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • 2.19.0
    • 2.20.0
    • camel-ftp
    • None
    • Windows 10 x64
      jdk1.8.0_131
      Camel 2.19.0

    • Novice

    Description

      I'm receiving an error from the FTP Component when its processing files in Camel 2.19.0.

      I'm trying to retrieve files using the Camel FTP component (Camel 2.19.0):

      from("ftp://my.host.com:21/my/relative/directory?download=true&stepwise=false&delete=false")

      org.apache.camel.component.file.GenericFileOperationFailedException: Cannot retrieve file: RemoteFile[my/relative/directory/file1.txt] from: ftp://my.host.com:21/my/relative/directory?delete=false&download=true&stepwise=false
          at org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:427)
          at org.apache.camel.component.file.remote.RemoteFileConsumer.processExchange(RemoteFileConsumer.java:137)
          at org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:218)
          at org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:182)
          at org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:174)
          at org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:101)
          at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
          at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
          at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
          at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
          at java.lang.Thread.run(Thread.java:748)
      

      From the TRACE logs, I can see that Camel is listing the files in the directory correctly:

      [TRACE] 2017-09-05 11:40:49,438 org.apache.camel.component.file.remote.FtpConsumer - Polling directory: my/relative/directory
      [TRACE] 2017-09-05 11:40:51,748 org.apache.camel.component.file.remote.FtpOperations - listFiles(my/relative/directory)
      [TRACE] 2017-09-05 11:40:58,657 org.apache.camel.component.file.remote.FtpConsumer - Found 3 in directory: my/relative/directory
      [TRACE] 2017-09-05 11:40:58,657 org.apache.camel.component.file.remote.FtpConsumer - FtpFile[name=/absolute/path/to/directory/file1.txt, dir=false, file=true]
      [TRACE] 2017-09-05 11:40:58,657 org.apache.camel.component.file.remote.FtpConsumer - FtpFile[name=/absolute/path/to/directory/file2.txt, dir=false, file=true]
      [TRACE] 2017-09-05 11:40:58,657 org.apache.camel.component.file.remote.FtpConsumer - FtpFile[name=/absolute/path/to/directory/file3.txt, dir=false, file=true]
      
      

      When Camel tries to process each file however, it appears to be prepending the relative directory to the absolute directory and failing to find the resulting garbled path:

      [TRACE] 2017-09-05 11:40:59,417 org.apache.camel.component.file.remote.FtpConsumer - Processing file: RemoteFile[absolute/path/to/directory/file1.txt]
      [TRACE] 2017-09-05 11:40:59,418 org.apache.camel.component.file.remote.FtpConsumer - Retrieving file: my/relative/directory//absolute/path/to/directory/file1.txt from: ftp://my.host.com:21/my/relative/directory?delete=false&download=true&stepwise=false
      [TRACE] 2017-09-05 11:40:59,418 org.apache.camel.component.file.remote.FtpOperations - retrieveFile(my/relative/directory//absolute/path/to/directory/file1.txt)
      [TRACE] 2017-09-05 11:40:59,418 org.apache.camel.component.file.remote.FtpOperations - Client retrieveFile: my/relative/directory//absolute/path/to/directory/file1.txt
      [WARN ] 2017-09-05 11:40:59,518 org.apache.camel.component.file.remote.FtpConsumer - Error processing file RemoteFile[absolute/path/to/directory/file1.txt] due to Cannot retrieve file: RemoteFile[absolute/path/to/directory/file1.txt] from: ftp://my.host.com:21/my/relative/directory?delete=false&download=true&stepwise=false
      
      

      This path in the logs constructed by the FTPComponent is incorrect:

      Retrieving file: my/relative/directory//absolute/path/to/directory/file1.txt
      

      I debugged the Camel FTP consumer and it looks like
      on line 238 is where the relative path is getting prepended to the absolute path

      Interestingly enough, the SFTP component is doing the same thing however it is working because

      RemoteFileOperations<ChannelSftp.LsEntry>
      

      does not set filename as an absolute path but

      RemoteFileOperations<FTPFile>
      

      does.

      Does anyone have any suggestions to work around this to get the FTP Conponent to consume the files? or am I doing something incorrectly?

      I'm using Camel 2.19.0

      Attachments

        Issue Links

          Activity

            People

              onders Onder Sezgin
              dheitzer dheitzer
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: