Author: davsclaus Date: Wed Sep 29 09:45:45 2010 New Revision: 1002541 URL: http://svn.apache.org/viewvc?rev=1002541&view=rev Log: CAMEL-3174: sftp retrieve file should change dir when doing that.
Modified: camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpOperations.java Modified: camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpOperations.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpOperations.java?rev=1002541&r1=1002540&r2=1002541&view=diff ============================================================================== --- camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpOperations.java (original) +++ camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpOperations.java Wed Sep 29 09:45:45 2010 @@ -397,7 +397,23 @@ public class SftpOperations implements R (GenericFile<ChannelSftp.LsEntry>) exchange.getProperty(FileComponent.FILE_EXCHANGE_FILE); ObjectHelper.notNull(target, "Exchange should have the " + FileComponent.FILE_EXCHANGE_FILE + " set"); target.setBody(os); - channel.get(name, os); + + // remember current directory + String currentDir = getCurrentDirectory(); + + // change directory to path where the file is to be retrieved + // (must do this as some FTP servers cannot retrieve using absolute path) + String path = FileUtil.onlyPath(name); + if (path != null) { + changeCurrentDirectory(path); + } + String onlyName = FileUtil.stripPath(name); + + channel.get(onlyName, os); + + // change back to current directory + changeCurrentDirectory(currentDir); + return true; } catch (SftpException e) { throw new GenericFileOperationFailedException("Cannot retrieve file: " + name, e); @@ -450,11 +466,26 @@ public class SftpOperations implements R throw new GenericFileOperationFailedException("Cannot create new local work file: " + local); } - try { // store the java.io.File handle as the body file.setBody(local); - channel.get(name, os); + + // remember current directory + String currentDir = getCurrentDirectory(); + + // change directory to path where the file is to be retrieved + // (must do this as some FTP servers cannot retrieve using absolute path) + String path = FileUtil.onlyPath(name); + if (path != null) { + changeCurrentDirectory(path); + } + String onlyName = FileUtil.stripPath(name); + + channel.get(onlyName, os); + + // change back to current directory + changeCurrentDirectory(currentDir); + } catch (SftpException e) { if (LOG.isTraceEnabled()) { LOG.trace("Error occurred during retrieving file: " + name + " to local directory. Deleting local work file: " + temp);