Как исправить ошибку: org.apache.camel.component.file.GenericFileOperationFailedException: Не удается получить файл? - PullRequest
0 голосов
/ 24 апреля 2019

Сначала у меня возникла следующая ошибка: GenericFileOperationFailedException - Cannot change directory to: ..] Я исправил ее, добавив stepwise=false к строке конечной точки:

sftp://sales.data.com:22/data/100?fileName=20190410.dat.gz&password=xxxxxx&stepwise=false&username=UserName

После этого произошла ошибка с приведенной ниже ошибкой, и я не смог найтилюбая соответствующая информация об исправлении этого.Что может вызвать проблему здесь?

org.apache.camel.component.file.GenericFileOperationFailedException: Cannot retrieve file: data/100/20190410.dat.gz
    at org.apache.camel.component.file.remote.SftpOperations.retrieveFileToStreamInBody(SftpOperations.java:692)
    at org.apache.camel.component.file.remote.SftpOperations.retrieveFile(SftpOperations.java:638)
    at org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:411)
    at org.apache.camel.component.file.remote.RemoteFileConsumer.processExchange(RemoteFileConsumer.java:137)
    at org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:226)
    at org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:190)
    at org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:175)
    at org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:102)
    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:745)
Caused by: java.io.InterruptedIOException
    at java.io.PipedInputStream.read(PipedInputStream.java:328)
    at java.io.PipedInputStream.read(PipedInputStream.java:377)
    at com.jcraft.jsch.ChannelSftp.fill(ChannelSftp.java:2325)
    at com.jcraft.jsch.ChannelSftp.header(ChannelSftp.java:2351)
    at com.jcraft.jsch.ChannelSftp.access$800(ChannelSftp.java:36)
    at com.jcraft.jsch.ChannelSftp$2.read(ChannelSftp.java:1093)
    at com.jcraft.jsch.ChannelSftp$2.read(ChannelSftp.java:1053)
    at org.apache.camel.util.IOHelper.copy(IOHelper.java:204)
    at org.apache.camel.util.IOHelper.copy(IOHelper.java:169)
    at org.apache.camel.util.IOHelper.copyAndCloseInput(IOHelper.java:218)
    at org.apache.camel.util.IOHelper.copyAndCloseInput(IOHelper.java:214)
    at org.apache.camel.component.file.remote.SftpOperations.retrieveFileToStreamInBody(SftpOperations.java:687)

1 Ответ

0 голосов
/ 27 апреля 2019

Используйте readLock для своего потребителя, заставляя его ждать, пока файл не будет полностью FTP-отредактирован.В документации Camel для ftp найдите эту опцию:

  • readLock-change

Идея такова: скажите Camel не читать файлкогда он видит это, но продолжать проверять, растет ли он в размерах.Пока он будет расти, верблюд будет ждать.Вы можете изменить связанные параметры, чтобы определить, как долго ждать и т. Д. Найдите на этой странице все упоминания о «readLock», чтобы найти больше.

...