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/10/06 10:08:56 UTC
svn commit: r1004923 - in /camel/trunk:
camel-core/src/main/java/org/apache/camel/util/
camel-core/src/test/java/org/apache/camel/util/
components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/
components/camel-ftp/src/test/java/org/ap...
Author: davsclaus
Date: Wed Oct 6 08:08:56 2010
New Revision: 1004923
URL: http://svn.apache.org/viewvc?rev=1004923&view=rev
Log:
CAMEL-3174: Fixed camel-ftp changing directory and downloading files when using absolute paths.
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/util/FileUtil.java
camel/trunk/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFile.java
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpConsumer.java
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpOperations.java
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpSimpleConsumeAbsoluteTest.java
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/SftpServerTestSupport.java
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/SftpSimpleConsumeAbsoluteTest.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/util/FileUtil.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/FileUtil.java?rev=1004923&r1=1004922&r2=1004923&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/util/FileUtil.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/util/FileUtil.java Wed Oct 6 08:08:56 2010
@@ -90,6 +90,19 @@ public final class FileUtil {
}
/**
+ * Does the name start with a leading separator
+ */
+ public static boolean hasLeadingSeparator(String name) {
+ if (name == null) {
+ return false;
+ }
+ if (name.startsWith("/") || name.startsWith(File.separator)) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
* Strip first leading separator
*/
public static String stripFirstLeadingSeparator(String name) {
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java?rev=1004923&r1=1004922&r2=1004923&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java Wed Oct 6 08:08:56 2010
@@ -43,6 +43,16 @@ public class FileUtilTest extends TestCa
assertEquals("foo/bar", FileUtil.stripLeadingSeparator("///foo/bar"));
}
+ public void testHasLeadingSeparator() {
+ assertEquals(false, FileUtil.hasLeadingSeparator(null));
+ assertEquals(false, FileUtil.hasLeadingSeparator("foo"));
+ assertEquals(false, FileUtil.hasLeadingSeparator("foo/bar"));
+ assertEquals(false, FileUtil.hasLeadingSeparator("foo/"));
+ assertEquals(true, FileUtil.hasLeadingSeparator("/foo/bar"));
+ assertEquals(true, FileUtil.hasLeadingSeparator("//foo/bar"));
+ assertEquals(true, FileUtil.hasLeadingSeparator("///foo/bar"));
+ }
+
public void testStripFirstLeadingSeparator() {
assertEquals(null, FileUtil.stripFirstLeadingSeparator(null));
assertEquals("foo", FileUtil.stripFirstLeadingSeparator("foo"));
Modified: camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java?rev=1004923&r1=1004922&r2=1004923&view=diff
==============================================================================
--- camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java (original)
+++ camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java Wed Oct 6 08:08:56 2010
@@ -135,12 +135,17 @@ public class FtpConsumer extends RemoteF
}
answer.setHostname(((RemoteFileConfiguration) endpoint.getConfiguration()).getHost());
- // all ftp files is considered as relative
- answer.setAbsolute(false);
+ // absolute or relative path
+ boolean absolute = FileUtil.hasLeadingSeparator(absolutePath);
+ answer.setAbsolute(absolute);
// create a pseudo absolute name
String dir = FileUtil.stripTrailingSeparator(absolutePath);
- String absoluteFileName = dir + "/" + file.getName();
+ String absoluteFileName = FileUtil.stripLeadingSeparator(dir + "/" + file.getName());
+ // if absolute start with a leading separator otherwise let it be relative
+ if (absolute) {
+ absoluteFileName = "/" + absoluteFileName;
+ }
answer.setAbsoluteFilePath(absoluteFileName);
// the relative filename, skip the leading endpoint configured path
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=1004923&r1=1004922&r2=1004923&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 Wed Oct 6 08:08:56 2010
@@ -501,7 +501,7 @@ public class FtpOperations implements Re
}
// if it starts with the root path then a little special handling for that
- if (path.startsWith("/") || path.startsWith("\\")) {
+ if (FileUtil.hasLeadingSeparator(path)) {
// change to root path
doChangeDirectory(path.substring(0, 1));
path = path.substring(1);
Modified: camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFile.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFile.java?rev=1004923&r1=1004922&r2=1004923&view=diff
==============================================================================
--- camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFile.java (original)
+++ camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFile.java Wed Oct 6 08:08:56 2010
@@ -18,7 +18,6 @@ package org.apache.camel.component.file.
import org.apache.camel.component.file.GenericFile;
import org.apache.camel.component.file.GenericFileMessage;
-import org.apache.camel.util.FileUtil;
/**
* Represents a remote file of some sort of backing object
@@ -73,9 +72,4 @@ public class RemoteFile<T> extends Gener
remoteResult.setHostname(remoteSource.getHostname());
}
- protected String normalizePathToProtocol(String path) {
- path = super.normalizePathToProtocol(path);
- // strip leading / for FTP protocol to avoid files with absolute paths
- return FileUtil.stripLeadingSeparator(path);
- }
}
Modified: camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpConsumer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpConsumer.java?rev=1004923&r1=1004922&r2=1004923&view=diff
==============================================================================
--- camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpConsumer.java (original)
+++ camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpConsumer.java Wed Oct 6 08:08:56 2010
@@ -133,12 +133,17 @@ public class SftpConsumer extends Remote
answer.setLastModified(file.getAttrs().getMTime() * 1000L);
answer.setHostname(((RemoteFileConfiguration) endpoint.getConfiguration()).getHost());
- // all ftp files is considered as relative
- answer.setAbsolute(false);
+ // absolute or relative path
+ boolean absolute = FileUtil.hasLeadingSeparator(absolutePath);
+ answer.setAbsolute(absolute);
// create a pseudo absolute name
String dir = FileUtil.stripTrailingSeparator(absolutePath);
- String absoluteFileName = dir + "/" + file.getFilename();
+ String absoluteFileName = FileUtil.stripLeadingSeparator(dir + "/" + file.getFilename());
+ // if absolute start with a leading separator otherwise let it be relative
+ if (absolute) {
+ absoluteFileName = "/" + absoluteFileName;
+ }
answer.setAbsoluteFilePath(absoluteFileName);
// the relative filename, skip the leading endpoint configured path
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=1004923&r1=1004922&r2=1004923&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 Oct 6 08:08:56 2010
@@ -357,7 +357,7 @@ public class SftpOperations implements R
}
// if it starts with the root path then a little special handling for that
- if (path.startsWith("/") || path.startsWith("\\")) {
+ if (FileUtil.hasLeadingSeparator(path)) {
// change to root path
doChangeDirectory(path.substring(0, 1));
path = path.substring(1);
Modified: camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpSimpleConsumeAbsoluteTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpSimpleConsumeAbsoluteTest.java?rev=1004923&r1=1004922&r2=1004923&view=diff
==============================================================================
--- camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpSimpleConsumeAbsoluteTest.java (original)
+++ camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpSimpleConsumeAbsoluteTest.java Wed Oct 6 08:08:56 2010
@@ -19,13 +19,11 @@ package org.apache.camel.component.file.
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
-import org.junit.Ignore;
import org.junit.Test;
/**
* @version $Revision$
*/
-@Ignore("Absolute do not work with Apache FTP Server")
public class FtpSimpleConsumeAbsoluteTest extends FtpServerTestSupport {
@Test
@@ -37,7 +35,10 @@ public class FtpSimpleConsumeAbsoluteTes
String expected = "Hello World";
// create file using regular file
- template.sendBodyAndHeader("file:///tmp/mytemp", expected, Exchange.FILE_NAME, "hello.txt");
+
+ // FTP Server does not support absolute path, so lets simulate it
+ String path = FTP_ROOT_DIR + "/tmp/mytemp";
+ template.sendBodyAndHeader("file:" + path, expected, Exchange.FILE_NAME, "hello.txt");
MockEndpoint mock = getMockEndpoint("mock:result");
mock.expectedMessageCount(1);
@@ -53,6 +54,8 @@ public class FtpSimpleConsumeAbsoluteTes
return new RouteBuilder() {
@Override
public void configure() throws Exception {
+ // notice we use an absolute starting path: /tmp/mytemp
+ // - we must remember to use // slash because of the url separator
from("ftp://localhost:" + getPort() + "//tmp/mytemp?username=admin&password=admin&delay=10s&disconnect=true")
.routeId("foo").noAutoStartup()
.to("mock:result");
Modified: camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/SftpServerTestSupport.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/SftpServerTestSupport.java?rev=1004923&r1=1004922&r2=1004923&view=diff
==============================================================================
--- camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/SftpServerTestSupport.java (original)
+++ camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/SftpServerTestSupport.java Wed Oct 6 08:08:56 2010
@@ -35,7 +35,7 @@ import org.junit.Before;
*/
public class SftpServerTestSupport extends BaseServerTestSupport {
- protected static final String FTP_ROOT_DIR = "res/home/";
+ protected static final String FTP_ROOT_DIR = "res/home";
protected SshServer sshd;
protected boolean canTest;
Modified: camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/SftpSimpleConsumeAbsoluteTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/SftpSimpleConsumeAbsoluteTest.java?rev=1004923&r1=1004922&r2=1004923&view=diff
==============================================================================
--- camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/SftpSimpleConsumeAbsoluteTest.java (original)
+++ camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/SftpSimpleConsumeAbsoluteTest.java Wed Oct 6 08:08:56 2010
@@ -19,13 +19,11 @@ package org.apache.camel.component.file.
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
-import org.junit.Ignore;
import org.junit.Test;
/**
* @version $Revision$
*/
-@Ignore("Absolute do not work with Apache SSHD")
public class SftpSimpleConsumeAbsoluteTest extends SftpServerTestSupport {
@Test
@@ -36,8 +34,9 @@ public class SftpSimpleConsumeAbsoluteTe
String expected = "Hello World";
- // create file using regular file
- template.sendBodyAndHeader("file:///tmp/mytemp", expected, Exchange.FILE_NAME, "hello.txt");
+ // FTP Server does not support absolute path, so lets simulate it
+ String path = FTP_ROOT_DIR + "/tmp/mytemp";
+ template.sendBodyAndHeader("file:" + path, expected, Exchange.FILE_NAME, "hello.txt");
MockEndpoint mock = getMockEndpoint("mock:result");
mock.expectedMessageCount(1);
@@ -53,7 +52,9 @@ public class SftpSimpleConsumeAbsoluteTe
return new RouteBuilder() {
@Override
public void configure() throws Exception {
- from("sftp://localhost:" + getPort() + "//tmp/mytemp?username=admin&password=admin&delay=10s&disconnect=true")
+ // notice we use an absolute starting path: /res/home/tmp/mytemp
+ // - we must remember to use // slash because of the url separator
+ from("sftp://localhost:" + getPort() + "//" + FTP_ROOT_DIR + "/tmp/mytemp?username=admin&password=admin&delay=10s&disconnect=true")
.routeId("foo").noAutoStartup()
.to("mock:result");
}