骆驼SFTP,quartz2组件提供:无法检索文件:由GenericFileOperationFailedException,当从SFTP
问题描述:
轮询多个文件,我想用下面的骆驼航线,并使用quartz2调度,之后轮询几个文件的轮询从SFTP位置的文件,我“M得到一个GenricFileOperationFailedException caused by java.io.IOException: Pipe closed
:骆驼SFTP,quartz2组件提供:无法检索文件:由GenericFileOperationFailedException,当从SFTP
JaxbDataFormat dataFormat = new JaxbDataFormat();
dataFormat.setContext(JAXBContext.newInstance(MyBean.class));
from(sftphost + sourcedirpath +
"?password=" + password
+ "&username=" + userName
+ "&include=" + filePattern
+ "&localWorkDirectory=" + localWorkingDirectory
+ "&flatten=true"
+ "&delete=true"
+ "&scheduler=quartz2"
+ "&scheduler.cron=0/45 * * * * ?"
+ "&stepwise=false"
+ "&disconnect=true")
.onException(Exception.class)
.to(sftphost + errdirpath + "?password=" + password + "&username=" + userName+"&disconnect=true")
.handled(true)
.end()
.log(LoggingLevel.INFO, "Processing File : ${file:onlyname}").log(LoggingLevel.INFO, "Before Unmarshalling XML").unmarshal(dataFormat)
.log(LoggingLevel.INFO, "after UnMarshalling the XML").beanRef("service", "processData(${body}, ${file:name})")
.to(sftphost + processedDirPAth + "?password=" + password + "&username=" + userName+ "&disconnect=true");
只有当我使用quartz2计划我面对这个问题。当我在骆驼路线中使用'& delay = 10000'参数时,上述骆驼路线 完全正常。
错误堆栈跟踪:
2016-04-22 10:33:15,634 | WARN | terface_Worker-1 | SftpConsumer ]
| ? ? | 264 - 1.0.0.SNAPSHOT | Error processing file RemoteFile[/home/source/file_one.XML
] due to Cannot retrieve file: /home/source/file_one.XML. Caused by: [org.apache.camel.component.file.GenericFileOperat
ionFailedException - Cannot retrieve file: /home/source/file_one.XML]
org.apache.camel.component.file.GenericFileOperationFailedException: Cannot retrieve file: /home/source/file_one.XML
at org.apache.camel.component.file.remote.SftpOperations.retrieveFileToFileInLocalWorkDirectory(SftpOperations.java:735)[264:myBundle:1.0.0.SNAPSHOT]
at org.apache.camel.component.file.remote.SftpOperations.retrieveFile(SftpOperations.java:591)[264:myBundle:1.0.0.SNAPSHOT]
at org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:396)[264:myBundle:1.0.0.SNAPSHOT]
at org.apache.camel.component.file.remote.RemoteFileConsumer.processExchange(RemoteFileConsumer.java:137)[264:myBundle:1.0.0.SNAPSHOT]
at org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:211)[264:myBundle:1.0.0.SNAPSHOT]
at org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:175)[264:myBundle:1.0.0.SNAPSHOT]
at org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:174)[264:myBundle:1.0.0.SNAPSHOT]
at org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:101)[264:myBundle:1.0.0.SNAPSHOT]
at org.apache.camel.pollconsumer.quartz2.QuartzScheduledPollConsumerJob.execute(QuartzScheduledPollConsumerJob.java:59)[264:myBundle:1.0.0.SNAPSHOT]
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)[264:myBundle
:1.0.0.SNAPSHOT]
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)[264:myBundle:1.0.0.SNAPSHOT]
Caused by: 4:
at com.jcraft.jsch.ChannelSftp._get(ChannelSftp.java:1160)[264:myBundle:1.0.0.SNAPSHOT]
at com.jcraft.jsch.ChannelSftp.get(ChannelSftp.java:1006)[264:myBundle:1.0.0.SNAPSHOT]
at com.jcraft.jsch.ChannelSftp.get(ChannelSftp.java:984)[264:myBundle
:1.0.0.SNAPSHOT]
at org.apache.camel.component.file.remote.SftpOperations.retrieveFileToFileInLocalWorkDirectory(SftpOperations.java:724)[264:myBundle:1.0.0.SNAPSHOT]
... 10 more
Caused by: java.io.IOException: Pipe closed
at java.io.PipedInputStream.read(PipedInputStream.java:307)[:1.8.0_45]
at java.io.PipedInputStream.read(PipedInputStream.java:377)[:1.8.0_45]
at com.jcraft.jsch.ChannelSftp.fill(ChannelSftp.java:2882)[264:myBundle:1.0.0.SNAPSHOT]
at com.jcraft.jsch.ChannelSftp.header(ChannelSftp.java:2908)[264:myBundle:1.0.0.SNAPSHOT]
at com.jcraft.jsch.ChannelSftp._get(ChannelSftp.java:1025)[264:myBundle:1.0.0.SNAPSHOT]
... 13 more
我还没有使用这是在骆驼路线被关闭任何其它IO流。
答
这看起来像是目标计算机上的SFTP用户的权限问题。请查阅https://winscp.net/eng/docs/sftp_codes#code_4了解更多详情。
它可能只是因为延迟而发生,因为SSL上下文未立即在Camel FTP2组件中配置/初始化,您需要在开始轮询之前延迟一小段时间。
+0
感谢您的答复,我只得到这个问题时,我使用参数“调度= quartz2”,当我使用延迟参数“&延迟= 15000”在mycamel路线我不明白这个问题。 –
我可以问你使用什么版本的骆驼?这个错误看起来对我来说很熟悉。 –
感谢您的回应。我使用的骆驼版本是2.15.2。 –
@RaminArabbagheri –