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 {