Hmm. How come when polling the absolute path it says this before listing the 
files in the directory (which works)?
>> SftpOperations 2010-10-04 15:45:07,494 -- TRACE -- Changing directory: /
>> SftpOperations 2010-10-04 15:45:07,608 -- TRACE -- Changing directory: tmp
>> SftpOperations 2010-10-04 15:45:07,697 -- TRACE -- Changing directory: 
>> activity_logs

...but then when it tries to retrieve the file (which fails) it just says:
>> SftpOperations 2010-10-04 15:45:08,277 -- TRACE -- Changing directory: tmp
>> SftpOperations 2010-10-04 15:45:08,367 -- TRACE -- Changing directory: 
>> activity_logs


That looks awfully like Camel isn't even asking the SFTP library to go to / 
first when it comes time to retrieve the file.

Cheers!
-Lorrin


On Oct 5, 2010, at 12:02 AM, Claus Ibsen wrote:

> Hi
> 
> Great that the relative works. This is also what I expected.
> 
> In terms of absolute then Camel changes the directory to / (since its
> absolute) and the SFTP library returns OK for this.
> But in reality it does not go to the root path, but most likely just
> goes to the home directory of the user.
> And hence why absolute does not work for you.
> 
> I don't see any API or way to tell SFTP library it should change to
> root path and not home folder.
> 
> A solution to be able to poll files from an absolute folder is to
> create a symlink in the user home directory which can be polled by the
> SFTP library.
> 
>> nlike the polling stage where it says "doPollDirectory from absolutePath: 
>> /tmp/activity_logs".
> The reason why you see this is because Camel logs the path configured
> from the endpoint, when the poller starts. Hence you see the leading
> /.
> 
> 
> 
> On Tue, Oct 5, 2010 at 12:58 AM, Lorrin Nelson
> <lhn_git...@nerdylorrin.net> wrote:
>> Hi Claus, thanks for the continued support. With the latest code (revision 
>> 1003927) relative URIs are working again for me.
>> 
>> This the first time I'm using camel-ftp. The server I'm talking to is a 
>> Fedora 11 box running OpenSSH_5.2p1. Regular FTP is an unlikely option for 
>> us. Relative URLs are an acceptable work-around.
>> 
>> Below is a trace log of an absolute URL.
>> 
>> On the first attempt, note that ~/tmp does exist. Therefore when it tries to 
>> go to *relative* path tmp (which is the wrong thing to do), it succeeds. 
>> Then when it tries to go one level deeper into pitch_activity_logs it fails. 
>> The second attempt is really interesting. Note there that the current 
>> working directory has remained at /home/tomcat/tmp. So when it fails to go 
>> to *relative* path tmp, it fails right away. BTW, note that it says 
>> "Retrieving file: tmp/activity_logs/activity_log.1285909200" with no leading 
>> slash, unlike the polling stage where it says "doPollDirectory from 
>> absolutePath: /tmp/activity_logs".
>> 
>> Cheers
>> -Lorrin
>> 
>> 
>> SftpConsumer 2010-10-04 15:45:07,445 -- INFO -- Connected and logged in to: 
>> sftp://tom...@host:22
>> SftpConsumer 2010-10-04 15:45:07,494 -- TRACE -- doPollDirectory from 
>> absolutePath: /tmp/activity_logs, dirName: null
>> SftpOperations 2010-10-04 15:45:07,494 -- TRACE -- Changing directory: /
>> SftpOperations 2010-10-04 15:45:07,608 -- TRACE -- Changing directory: tmp
>> SftpOperations 2010-10-04 15:45:07,697 -- TRACE -- Changing directory: 
>> activity_logs
>> SftpConsumer 2010-10-04 15:45:07,788 -- TRACE -- Polling directory: 
>> /tmp/activity_logs
>> SftpConsumer 2010-10-04 15:45:08,011 -- TRACE -- Found 4 in directory: 
>> /tmp/activity_logs
>> SftpOperations 2010-10-04 15:45:08,012 -- TRACE -- Changing directory: /
>> SftpOperations 2010-10-04 15:45:08,099 -- TRACE -- Changing directory: home
>> SftpOperations 2010-10-04 15:45:08,189 -- TRACE -- Changing directory: tomcat
>> SftpConsumer 2010-10-04 15:45:08,274 -- DEBUG -- Took 0.829 seconds to poll: 
>> /tmp/activity_logs/
>> SftpConsumer 2010-10-04 15:45:08,275 -- DEBUG -- Total 1 files to consume
>> SftpConsumer 2010-10-04 15:45:08,276 -- TRACE -- Processing file: 
>> GenericFile[activity_log.1285909200]
>> SftpConsumer 2010-10-04 15:45:08,276 -- TRACE -- Retrieving file: 
>> tmp/activity_logs/activity_log.1285909200 from: 
>> Endpoint[sftp://tom...@host//tmp/activity_logs/?delay=15000&idempotent=true&idempotentRepository=%23apacheLogFilenameRepositoryAcceptNewest&include=.*.log.%5B-%2F%3A0-9%5D*&initialDelay=3000&noop=true&password=******]
>> SftpOperations 2010-10-04 15:45:08,277 -- TRACE -- Changing directory: tmp
>> SftpOperations 2010-10-04 15:45:08,367 -- TRACE -- Changing directory: 
>> activity_logs
>> SftpConsumer 2010-10-04 15:45:08,414 -- ERROR -- Caused by: 
>> [org.apache.camel.component.file.GenericFileOperationFailedException - 
>> Cannot change directory to: activity_logs]
>> org.apache.camel.component.file.GenericFileOperationFailedException: Cannot 
>> change directory to: activity_logs
>>        at 
>> org.apache.camel.component.file.remote.SftpOperations.doChangeDirectory(SftpOperations.java:383)
>>        at 
>> org.apache.camel.component.file.remote.SftpOperations.changeCurrentDirectory(SftpOperations.java:368)
>>        at 
>> org.apache.camel.component.file.remote.SftpOperations.retrieveFileToStreamInBody(SftpOperations.java:451)
>>        at 
>> org.apache.camel.component.file.remote.SftpOperations.retrieveFile(SftpOperations.java:430)
>>        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.doChangeDirectory(SftpOperations.java:381)
>>        ... 16 more
>> ScheduledPollConsumer 2010-10-04 15:45:08,426 -- TRACE -- Finished polling: 
>> Endpoint[sftp://tom...@host//tmp/activity_logs/?delay=15000&idempotent=true&idempotentRepository=%23apacheLogFilenameRepositoryAcceptNewest&include=.*.log.%5B-%2F%3A0-9%5D*&initialDelay=3000&noop=true&password=******]
>> 
>> 
>> 
>> ScheduledPollConsumer 2010-10-04 15:45:21,413 -- TRACE -- Starting to poll: 
>> Endpoint[sftp://tom...@host//tmp/activity_logs/?delay=15000&idempotent=true&idempotentRepository=%23apacheLogFilenameRepositoryAcceptNewest&include=.*.log.%5B-%2F%3A0-9%5D*&initialDelay=3000&noop=true&password=******]
>> SftpConsumer 2010-10-04 15:45:21,413 -- TRACE -- doPollDirectory from 
>> absolutePath: /tmp/activity_logs, dirName: null
>> SftpOperations 2010-10-04 15:45:21,413 -- TRACE -- Changing directory: /
>> SftpOperations 2010-10-04 15:45:21,496 -- TRACE -- Changing directory: tmp
>> SftpOperations 2010-10-04 15:45:21,585 -- TRACE -- Changing directory: 
>> activity_logs
>> SftpConsumer 2010-10-04 15:45:21,675 -- TRACE -- Polling directory: 
>> /tmp/activity_logs
>> SftpConsumer 2010-10-04 15:45:21,907 -- TRACE -- Found 4 in directory: 
>> /tmp/activity_logs
>> SftpOperations 2010-10-04 15:45:21,907 -- TRACE -- Changing directory: /
>> SftpOperations 2010-10-04 15:45:21,997 -- TRACE -- Changing directory: home
>> SftpOperations 2010-10-04 15:45:22,084 -- TRACE -- Changing directory: tomcat
>> SftpOperations 2010-10-04 15:45:22,177 -- TRACE -- Changing directory: tmp
>> SftpConsumer 2010-10-04 15:45:22,261 -- DEBUG -- Took 0.848 seconds to poll: 
>> /tmp/activity_logs/
>> SftpConsumer 2010-10-04 15:45:22,261 -- DEBUG -- Total 1 files to consume
>> SftpConsumer 2010-10-04 15:45:22,261 -- TRACE -- Processing file: 
>> GenericFile[activity_log.1285909200]
>> SftpConsumer 2010-10-04 15:45:22,261 -- TRACE -- Retrieving file: 
>> tmp/activity_logs/activity_log.1285909200 from: 
>> Endpoint[sftp://tom...@host//tmp/activity_logs/?delay=15000&idempotent=true&idempotentRepository=%23apacheLogFilenameRepositoryAcceptNewest&include=.*.log.%5B-%2F%3A0-9%5D*&initialDelay=3000&noop=true&password=******]
>> SftpOperations 2010-10-04 15:45:22,262 -- TRACE -- Changing directory: tmp
>> SftpConsumer 2010-10-04 15:45:22,305 -- ERROR -- Caused by: 
>> [org.apache.camel.component.file.GenericFileOperationFailedException - 
>> Cannot change directory to: tmp]
>> org.apache.camel.component.file.GenericFileOperationFailedException: Cannot 
>> change directory to: tmp
>>        at 
>> org.apache.camel.component.file.remote.SftpOperations.doChangeDirectory(SftpOperations.java:383)
>>        at 
>> org.apache.camel.component.file.remote.SftpOperations.changeCurrentDirectory(SftpOperations.java:368)
>>        at 
>> org.apache.camel.component.file.remote.SftpOperations.retrieveFileToStreamInBody(SftpOperations.java:451)
>>        at 
>> org.apache.camel.component.file.remote.SftpOperations.retrieveFile(SftpOperations.java:430)
>>        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.doChangeDirectory(SftpOperations.java:381)
>>        ... 16 more
>> ScheduledPollConsumer 2010-10-04 15:45:22,311 -- TRACE -- Finished polling: 
>> Endpoint[sftp://tom...@host//tmp/activity_logs/?delay=15000&idempotent=true&idempotentRepository=%23apacheLogFilenameRepositoryAcceptNewest&include=.*.log.%5B-%2F%3A0-9%5D*&initialDelay=3000&noop=true&password=******]
>> 
>> 
>> 
>> 
>> On Oct 2, 2010, at 12:14 AM, Claus Ibsen wrote:
>> 
>>> Hi Loririn
>>> 
>>> I think you/we have to step back. We have other users in the past
>>> running with SFTP with no problems at all. Also fetching files
>>> recursively.
>>> So I wonder if we should revert back and keep the old logic!
>>> 
>>> 1)
>>> Is this the first time you use camel-ftp?
>>> 
>>> 2)
>>> What OS and FTP server are you using?
>>> 
>>> 3)
>>> Can you use regular FTP instead?
>>> 
>>> 4)
>>> Use relative urls over absolute. They where the first supported.
>>> 
>>> 5)
>>> Can you enable TRACE logging on org.apache.camel.component.file and
>>> setup a simple example so it makes it easier to follow and understand
>>> what its supposed to do, and what happens in reality so we can see and
>>> understand the difference.
>>> 
>>> 
>>> 
>>> 
>>> On Fri, Oct 1, 2010 at 10:45 PM, Lorrin Nelson
>>> <lhn_git...@nerdylorrin.net> wrote:
>>>> Hi Claus. Ack, sorry about that. I'm pulling through github rather than 
>>>> SVN directly and then running via a Maven project pointing at my locally 
>>>> built Camel, so it's sometimes confusing how up-to-date I am.
>>>> 
>>>> So I think I have current code, including checkin "CAMEL-3174: Changing 
>>>> dir with ftp must do one dir at a time." and I think SFTP polling is now 
>>>> broken for both absolute and relative URLs. See debug walk-throughs and 
>>>> stack traces below.
>>>> 
>>>> Absolute URI with double leading /:
>>>> sftp://u...@host//home/user/subdir?idempotent=true&idempotentRepository=#myCustomIR&include=.*.log&noop=true&password=******
>>>> 
>>>> SftpOperations.changeCurrentDirectory("home/user/subdir") //note there's 
>>>> no leading slash on the supposedly absolute path!
>>>>        //splits into chunks successfully, starts looping through chunks
>>>> doChangeDirectory("home")
>>>> ChannelSftp.cd("home")
>>>>        //path=remoteAbsolutePath(path);
>>>>        //yields "/home/user/home". Doh!
>>>> 
>>>> 
>>>> Relative URI with single leading /:
>>>> sftp://u...@host/subdir?idempotent=true&idempotentRepository=#myCustomIR&include=.*.log&noop=true&password=******
>>>> SftpOperations.changeCurrentDirectory("subdir")
>>>>        //splits into single chunk, starts looping through chunks
>>>> doChangeDirectory("subdir")
>>>> ChannelSftp.cd("home")
>>>>        //path=remoteAbsolutePath(path);
>>>>        //yields "/home/user/subdir". yay!
>>>> 
>>>> ..but then, back in SftpOperations.retrieveFileToStreamInBody, it hits the 
>>>> "change back to current directory code"
>>>> changeCurrentDirectory("/home/tomcat"); //now we have a leading slash, 
>>>> unlike before
>>>>        //splits info chunks "", "home", and "tomcat". Doh!
>>>> doChangeDirectory("")
>>>> ChannelSftp.cd("")
>>>>        //path=remoteAbsolutePath(path) throws a 
>>>> StringIndexOutOfBoundsException when it receives empty string.
>>>> 
>>>> 
>>>> Stack trace when attempting to supply absolute path:
>>>> org.apache.camel.component.file.GenericFileOperationFailedException: 
>>>> Cannot change directory to: home
>>>>        at 
>>>> org.apache.camel.component.file.remote.SftpOperations.doChangeDirectory(SftpOperations.java:372)
>>>>        at 
>>>> org.apache.camel.component.file.remote.SftpOperations.changeCurrentDirectory(SftpOperations.java:361)
>>>>        at 
>>>> org.apache.camel.component.file.remote.SftpOperations.retrieveFileToStreamInBody(SftpOperations.java:428)
>>>>        at 
>>>> org.apache.camel.component.file.remote.SftpOperations.retrieveFile(SftpOperations.java:407)
>>>>        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.doChangeDirectory(SftpOperations.java:370)
>>>>        ... 16 more
>>>> 
>>>> 
>>>> Stack trace when relative URL tries to restore current working directory:
>>>> SftpConsumer 2010-10-01 13:41:58,529 -- ERROR -- Caused by: 
>>>> [org.apache.camel.component.file.GenericFileOperationFailedException - 
>>>> Cannot change directory to: ]
>>>> org.apache.camel.component.file.GenericFileOperationFailedException: 
>>>> Cannot change directory to:
>>>>        at 
>>>> org.apache.camel.component.file.remote.SftpOperations.doChangeDirectory(SftpOperations.java:372)
>>>>        at 
>>>> org.apache.camel.component.file.remote.SftpOperations.changeCurrentDirectory(SftpOperations.java:361)
>>>>        at 
>>>> org.apache.camel.component.file.remote.SftpOperations.retrieveFileToStreamInBody(SftpOperations.java:435)
>>>>        at 
>>>> org.apache.camel.component.file.remote.SftpOperations.retrieveFile(SftpOperations.java:407)
>>>>        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: 4:
>>>>        at com.jcraft.jsch.ChannelSftp.cd(ChannelSftp.java:285)
>>>>        at 
>>>> org.apache.camel.component.file.remote.SftpOperations.doChangeDirectory(SftpOperations.java:370)
>>>>        ... 16 more
>>>> Caused by: java.lang.StringIndexOutOfBoundsException: String index out of 
>>>> range: 0
>>>>        at java.lang.String.charAt(String.java:686)
>>>>        at 
>>>> com.jcraft.jsch.ChannelSftp.remoteAbsolutePath(ChannelSftp.java:2359)
>>>>        at com.jcraft.jsch.ChannelSftp.cd(ChannelSftp.java:264)
>>>>        ... 17 more
>>>> 
>>>> Cheers
>>>> -Lorrin
>>>> 
>>>> On Sep 29, 2010, at 9:37 PM, Claus Ibsen wrote:
>>>> 
>>>>> Hi
>>>>> 
>>>>> You have not used the latest source code. The stacktrace points to
>>>>> empty lines etc.
>>>>> Make sure you build camel-core and camel-ftp using latest source code.
>>>>> 
>>>>> Revision: 1002946
>>>>> Node Kind: directory
>>>>> Schedule: normal
>>>>> Last Changed Author: davsclaus
>>>>> Last Changed Rev: 1002821
>>>>> Last Changed Date: 2010-09-29 21:31:23 +0200 (Wed, 29 Sep 2010)
>>>>> 
>>>>> 
>>>>> On Wed, Sep 29, 2010 at 11:55 PM, Lorrin Nelson
>>>>> <lhn_git...@nerdylorrin.net> wrote:
>>>>>> 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
>>>>>>> <lhn_git...@nerdylorrin.net> 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 <lhn_git...@nerdylorrin.net> 
>>>>>>>>> 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
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> --
>>>>> 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
>>> 
>> 
>> 
> 
> 
> 
> -- 
> 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
> 

Reply via email to