You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2010/07/23 14:38:01 UTC
svn commit: r967074 -
/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java
Author: davsclaus
Date: Fri Jul 23 12:38:01 2010
New Revision: 967074
URL: http://svn.apache.org/viewvc?rev=967074&view=rev
Log:
CAMEL-2952: camel-ftp now works with MVS file systems.
Modified:
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java
Modified: camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java?rev=967074&r1=967073&r2=967074&view=diff
==============================================================================
--- camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java (original)
+++ camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java Fri Jul 23 12:38:01 2010
@@ -256,17 +256,36 @@ public class FtpOperations implements Re
@SuppressWarnings("unchecked")
private boolean retrieveFileToStreamInBody(String name, Exchange exchange) throws GenericFileOperationFailedException {
OutputStream os = null;
+ boolean result;
try {
os = new ByteArrayOutputStream();
GenericFile<FTPFile> target = (GenericFile<FTPFile>) exchange.getProperty(FileComponent.FILE_EXCHANGE_FILE);
ObjectHelper.notNull(target, "Exchange should have the " + FileComponent.FILE_EXCHANGE_FILE + " set");
target.setBody(os);
- return client.retrieveFile(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);
+
+ result = client.retrieveFile(onlyName, os);
+
+ // change back to current directory
+ changeCurrentDirectory(currentDir);
+
} catch (IOException e) {
throw new GenericFileOperationFailedException(client.getReplyCode(), client.getReplyString(), e.getMessage(), e);
} finally {
IOHelper.close(os, "retrieve: " + name, log);
}
+
+ return result;
}
@SuppressWarnings("unchecked")
@@ -317,9 +336,24 @@ public class FtpOperations implements Re
try {
GenericFile<FTPFile> target = (GenericFile<FTPFile>) exchange.getProperty(FileComponent.FILE_EXCHANGE_FILE);
// store the java.io.File handle as the body
- target.setBody(local);
- result = client.retrieveFile(name, os);
+ target.setBody(local);
+
+ // 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);
+
+ result = client.retrieveFile(onlyName, os);
+ // change back to current directory
+ changeCurrentDirectory(currentDir);
+
} catch (IOException e) {
throw new GenericFileOperationFailedException(client.getReplyCode(), client.getReplyString(), e.getMessage(), e);
} finally {