2017-09-05 6 views
0

Je suis en train de récupérer des fichiers à l'aide du composant Camel FTP (Camel 2.19.0):FTP Apache Camel obtenir Impossible de récupérer le fichier: Erreur RemoteFile

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

Camel se connecte et la liste des fichiers dans le répertoire correctement mais quand il va les traiter, il jette l'exception suivante pour chaque fichier:

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) 

a partir des journaux de TRACE, je peux voir que Camel est la liste des fichiers dans le répertoire correctement:

[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] 

Lorsque Camel tente de traiter chaque dossier cependant, il semble être préfixer le répertoire relatif au répertoire absolu et de ne pas trouver le chemin brouillées résultant:

[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 

Ce chemin dans les journaux construits par le FTPComponent est incorrect:

fichier Récupération: mon/parent/répertoire // absolu/chemin/vers/répertoire/file1.txt

Je débogué le consommateur Camel FTP et il ressemble à on line 238 is where the relative path is getting prepended to the absolute path

Il est intéressant de the SFTP component is doing the same thing mais il fonctionne parce que RemoteFileOperations<ChannelSftp.LsEntry> ne nom de fichier défini non pas comme un chemin absolu mais RemoteFileOperations<FTPFile> fait.

Est-ce que quelqu'un a des suggestions pour contourner ce problème afin que le FTP Conponent utilise les fichiers? ou est-ce que je fais quelque chose de mal?

J'utilise Camel 2.19.0

Répondre

0

Par défaut, le chameau ira à \ home {nom d'utilisateur} \ répertoire.
Si votre fichier est maintenu sous chemin par rapport à cela, il vous suffit de donner le chemin du répertoire comme \ abc-tout-chemin \ file.txt
Si votre dossier est conservé à tout autre chemin que \ home {nom d'utilisateur} \, Dans ce cas, vous devez donner
\ .. \ .. \ abc-any-chemin absolu \ fichier.txt

Camel ne vous permet pas d'entrer directement le chemin absolu. J'espère que cela t'aides!

+0

Salut désolé, cela ne résout pas mon problème. Le problème n'est pas de savoir si les chemins relatifs ou absolus fonctionnent, ni avec le composant FTP de Camel (SFTP fonctionne cependant). –