2017-09-05 3 views
0

Ich versuche, Dateien abzurufen mit der Camel FTP-Komponente (Camel 2.19.0):Apache Camel FTP bekommen Datei kann nicht abgerufen werden: Remote Fehler

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

Kamel verbindet und die Auflistung der Dateien im Verzeichnis korrekt jedoch, wenn es geht, sie zu verarbeiten, ist es die folgende Ausnahme für jede Datei wirft:

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) 

Aus den TRACE-Protokollen, kann ich sehen, dass Camel die Dateien im Verzeichnis listet korrekt:

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

Wenn Camel versucht jedoch jede Datei zu verarbeiten, ist es das Voranstellen der relativen Verzeichnis auf das absolute Verzeichnis zu sein scheint und andernfalls die resultierende verstümmelte Weg zu finden:

[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 

Dieser Weg in den von der FTPComponent konstruiert Protokolle falsch ist:

Abrufen von Datei: mein/Verwandten/Verzeichnis // absolute/path/to/directory/file1.txt

ich das Kamel FTP Verbraucher debuggt und es sieht aus wie on line 238 is where the relative path is getting prepended to the absolute path

Interessanterweise the SFTP component is doing the same thing es aber funktioniert, weil RemoteFileOperations<ChannelSftp.LsEntry> Dateiname als absoluter Pfad nicht gesetzt ist, aber RemoteFileOperations<FTPFile> tut.

Hat jemand irgendwelche Vorschläge, um dies zu umgehen, um die FTP-Komponente die Dateien zu konsumieren? oder mache ich etwas falsch?

Ich bin mit Camel 2.19.0

Antwort

0

wird standardmäßig Kamel nach Hause gehen \ {username} \ Verzeichnis.
Wenn Ihre Datei unter einem relativen Pfad zu diesem Pfad gehalten wird, müssen Sie nur den Verzeichnispfad als \ abc-any-path \ file.txt angeben
Wenn Ihre Datei auf einem anderen Pfad als \ home {username} gespeichert ist, dann müssen Sie in diesem Fall
\ .. \ .. \ abc-any-absolute-path \ file.txt geben

Camel wird Ihnen nicht erlauben, absoluten Pfad direkt einzugeben. Hoffe das hilft!

+0

Hallo Entschuldigung, das behebt mein Problem nicht. Das Problem ist nicht, ob relative oder absolute Pfade funktionieren - auch nicht mit der Camel FTP-Komponente (SFTP funktioniert jedoch). –

Verwandte Themen