I'm pretty sure I was already at revision 1002541 before. Now I definitely am.
Same Exception. I think the problem is the lack of leading /.
SftpOperations.retrieveFileToStreamInBody computes path as "tmp/mult", calls
changeCurrentDirectory(path), which in turn calls channel.cd(path), which (now
we're in com.jcraft.jsch.ChannelSftp) calls path=remoteAbsolutePath(path); and
computes path: "/home/test/tmp/mult", which does not exist.
SftpConsumer 2010-09-29 14:51:50,487 -- ERROR -- Caused by:
[org.apache.camel.component.file.GenericFileOperationFailedException - Cannot
change current directory to: tmp/mult]
org.apache.camel.component.file.GenericFileOperationFailedException: Cannot
change current directory to: tmp/mult
at
org.apache.camel.component.file.remote.SftpOperations.changeCurrentDirectory(SftpOperations.java:352)
at
org.apache.camel.component.file.remote.SftpOperations.retrieveFileToStreamInBody(SftpOperations.java:408)
at
org.apache.camel.component.file.remote.SftpOperations.retrieveFile(SftpOperations.java:387)
at
org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:299)
at
org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:155)
at
org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:121)
at
org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:97)
at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at
java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181)
at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:637)
Caused by: 2: No such file
at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2289)
at com.jcraft.jsch.ChannelSftp._realpath(ChannelSftp.java:1822)
at com.jcraft.jsch.ChannelSftp.cd(ChannelSftp.java:268)
at
org.apache.camel.component.file.remote.SftpOperations.changeCurrentDirectory(SftpOperations.java:350)
... 15 more
Cheers!
-Lorrin
On Sep 29, 2010, at 12:32 PM, Claus Ibsen wrote:
> Hi
>
> Can you try again with latest source code from trunk. I have changed
> the logic to change dir one folder at a time.
>
>
> On Wed, Sep 29, 2010 at 7:47 PM, Lorrin Nelson
> <[email protected]> wrote:
>> Thanks for the quick response. I'm seeing a different failure now ("Cannot
>> change current directory to: tmp/mult" rather than "Cannot retrieve file:
>> tmp/mult/dummy-5.log"). Is it suspicious that in either case there is no
>> leading /?
>>
>> I tried uris
>> sftp://t...@host//tmp/mult?include=.*\.log
>> and
>> sftp://t...@host///tmp/mult?include=.*\.log
>>
>> SftpConsumer 2010-09-29 10:31:48,401 -- ERROR -- Caused by:
>> [org.apache.camel.component.file.GenericFileOperationFailedException -
>> Cannot change current directory to: tmp/mult]
>> org.apache.camel.component.file.GenericFileOperationFailedException: Cannot
>> change current directory to: tmp/mult
>> at
>> org.apache.camel.component.file.remote.SftpOperations.changeCurrentDirectory(SftpOperations.java:352)
>> at
>> org.apache.camel.component.file.remote.SftpOperations.retrieveFileToStreamInBody(SftpOperations.java:408)
>> at
>> org.apache.camel.component.file.remote.SftpOperations.retrieveFile(SftpOperations.java:387)
>> at
>> org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:299)
>> at
>> org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:155)
>> at
>> org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:121)
>> at
>> org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:97)
>> at
>> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
>> at
>> java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
>> at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
>> at
>> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
>> at
>> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181)
>> at
>> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205)
>> at
>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>> at
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>> at java.lang.Thread.run(Thread.java:637)
>> Caused by: 2: No such file
>> at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2289)
>> at com.jcraft.jsch.ChannelSftp._realpath(ChannelSftp.java:1822)
>> at com.jcraft.jsch.ChannelSftp.cd(ChannelSftp.java:268)
>> at
>> org.apache.camel.component.file.remote.SftpOperations.changeCurrentDirectory(SftpOperations.java:350)
>> ... 15 more
>>
>> On a tangentially related note, there's some file name processing during the
>> move step that throws a NullPointerException when the URI contains a
>> trailing slash:
>>
>> sftp://t...@host/tmp/mult/?include=.*\.log
>>
>> The problem is that GenericFile.changeFileName calls
>> newFileName = ObjectHelper.after(newFileName, endpointPath +
>> getFileSeparator());
>> ...without first checking if endPointPath contains a trailing separator.
>>
>> E.g.
>> newFileName: "tmp/mult/.done/dummy-2.log"
>> endPointPath: "tmp/mult/"
>>
>> ObjectHelper.after():
>> text: "tmp/mult/.done/dummy-2.log"
>> after: "tmp/mult//"
>>
>> text doesn't contain after (because of double //), returns null,
>> changeFileName() doesn't expect null, throws NPE.
>>
>> GenericFileOnCompletion 2010-09-29 10:37:37,888 -- ERROR -- Caused by:
>> [java.lang.NullPointerException - null]
>> java.lang.NullPointerException
>> at java.io.File.<init>(File.java:222)
>> at
>> org.apache.camel.component.file.GenericFile.changeFileName(GenericFile.java:169)
>> at
>> org.apache.camel.component.file.strategy.GenericFileExpressionRenamer.renameFile(GenericFileExpressionRenamer.java:41)
>> at
>> org.apache.camel.component.file.strategy.GenericFileRenameProcessStrategy.commit(GenericFileRenameProcessStrategy.java:82)
>> at
>> org.apache.camel.component.file.GenericFileOnCompletion.processStrategyCommit(GenericFileOnCompletion.java:121)
>> at
>> org.apache.camel.component.file.GenericFileOnCompletion.onCompletion(GenericFileOnCompletion.java:83)
>> at
>> org.apache.camel.component.file.GenericFileOnCompletion.onComplete(GenericFileOnCompletion.java:52)
>> at
>> org.apache.camel.util.UnitOfWorkHelper.doneSynchronizations(UnitOfWorkHelper.java:55)
>> at
>> org.apache.camel.impl.DefaultUnitOfWork.done(DefaultUnitOfWork.java:173)
>> at
>> org.apache.camel.processor.UnitOfWorkProcessor.doneUow(UnitOfWorkProcessor.java:121)
>> at
>> org.apache.camel.processor.UnitOfWorkProcessor.access$000(UnitOfWorkProcessor.java:36)
>> at
>> org.apache.camel.processor.UnitOfWorkProcessor$1.done(UnitOfWorkProcessor.java:106)
>> at org.apache.camel.processor.Pipeline.process(Pipeline.java:130)
>> at
>> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:99)
>> at
>> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70)
>> at
>> org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
>> at
>> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
>> at
>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:68)
>> at
>> org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:322)
>> at
>> org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:155)
>> at
>> org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:121)
>> at
>> org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:97)
>> at
>> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
>> at
>> java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
>> at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
>> at
>> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
>> at
>> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181)
>> at
>> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205)
>> at
>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>> at
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>> at java.lang.Thread.run(Thread.java:637)
>>
>>
>>
>>
>> On Sep 29, 2010, at 2:46 AM, Claus Ibsen wrote:
>>
>>> Hi
>>>
>>> I have committed a fix to the SFTP component. Can you try with latest
>>> source code from trunk?
>>>
>>>
>>> On Tue, Sep 28, 2010 at 7:36 PM, Lorrin <[email protected]> wrote:
>>>>
>>>> I just bumped into the same problem. I'm running 2.5-SNAPSHOT.
>>>>
>>>> SftpConsumer 2010-09-28 10:31:28,094 -- ERROR -- Caused by:
>>>> [org.apache.camel.component.file.GenericFileOperationFailedException -
>>>> Cannot retrieve file: tmp/mult/dummy-5.log]
>>>> org.apache.camel.component.file.GenericFileOperationFailedException: Cannot
>>>> retrieve file: tmp/mult/dummy-5.log
>>>> at
>>>> org.apache.camel.component.file.remote.SftpOperations.retrieveFileToStreamInBody(SftpOperations.java:403)
>>>> at
>>>> org.apache.camel.component.file.remote.SftpOperations.retrieveFile(SftpOperations.java:387)
>>>> at
>>>> org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:299)
>>>> at
>>>> org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:155)
>>>> at
>>>> org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:121)
>>>> at
>>>> org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:97)
>>>> at
>>>> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
>>>> at
>>>> java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
>>>> at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
>>>> at
>>>> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
>>>> at
>>>> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181)
>>>> at
>>>> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205)
>>>> at
>>>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>>>> at
>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>>>> at java.lang.Thread.run(Thread.java:637)
>>>> Caused by: 2: No such file
>>>> at
>>>> com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2289)
>>>> at com.jcraft.jsch.ChannelSftp._get(ChannelSftp.java:901)
>>>> at com.jcraft.jsch.ChannelSftp.get(ChannelSftp.java:870)
>>>> at com.jcraft.jsch.ChannelSftp.get(ChannelSftp.java:849)
>>>> at
>>>> org.apache.camel.component.file.remote.SftpOperations.retrieveFileToStreamInBody(SftpOperations.java:400)
>>>> ... 14 more
>>>>
>>>> --
>>>> View this message in context:
>>>> http://camel.465427.n5.nabble.com/How-to-change-directory-while-using-sftp-component-tp2806817p2857187.html
>>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>>
>>>
>>>
>>>
>>> --
>>> Claus Ibsen
>>> Apache Camel Committer
>>>
>>> Author of Camel in Action: http://www.manning.com/ibsen/
>>> Open Source Integration: http://fusesource.com
>>> Blog: http://davsclaus.blogspot.com/
>>> Twitter: http://twitter.com/davsclaus
>>>
>>
>>
>
>
>
> --
> Claus Ibsen
> Apache Camel Committer
>
> Author of Camel in Action: http://www.manning.com/ibsen/
> Open Source Integration: http://fusesource.com
> Blog: http://davsclaus.blogspot.com/
> Twitter: http://twitter.com/davsclaus
>