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

Apache Camel FTP getting Cannot retrieve file: RemoteFile error

    XMLWordPrintableJSON

    Details

    • Type: Improvement
    • Status: Resolved
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 2.19.0
    • Fix Version/s: 2.20.0
    • Component/s: camel-ftp
    • Labels:
      None
    • Environment:

      Windows 10 x64
      jdk1.8.0_131
      Camel 2.19.0

    • Estimated Complexity:
      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

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

                Dates

                • Created:
                  Updated:
                  Resolved: