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/08/23 17:15:01 UTC
svn commit: r988146 - in /camel/trunk:
camel-core/src/main/java/org/apache/camel/component/file/
camel-core/src/main/java/org/apache/camel/component/file/strategy/
camel-core/src/main/java/org/apache/camel/processor/
camel-core/src/test/java/org/apache...
Author: davsclaus
Date: Mon Aug 23 15:15:00 2010
New Revision: 988146
URL: http://svn.apache.org/viewvc?rev=988146&view=rev
Log:
CAMEL-1895: Fixed limitation of pollEnrich not being able to poll from file endpoint if route started from file endpoint as well.
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileProcessStrategy.java
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileDeleteProcessStrategy.java
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileRenameProcessStrategy.java
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/PollEnricher.java
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumeMoveRelativeNameTest.java
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumePollEnrichFileTest.java
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerAbsolutePathWithAbsoluteMoveTest.java
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerAbsolutePathWithRelativeMoveTest.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/SftpConsumer.java
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerMultipleDirectoriesTest.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java?rev=988146&r1=988145&r2=988146&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java Mon Aug 23 15:15:00 2010
@@ -127,7 +127,6 @@ public class FileConsumer extends Generi
answer.setEndpointPath(endpointPath);
answer.setFile(file);
- answer.setFileName(file.getName());
answer.setFileNameOnly(file.getName());
answer.setFileLength(file.length());
// must use FileUtil.isAbsolute to have consistent check for whether the file is
@@ -158,6 +157,9 @@ public class FileConsumer extends Generi
}
}
+ // the file name should be the relative path
+ answer.setFileName(answer.getRelativeFilePath());
+
// use file as body as we have converters if needed as stream
answer.setBody(file);
return answer;
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileProcessStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileProcessStrategy.java?rev=988146&r1=988145&r2=988146&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileProcessStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileProcessStrategy.java Mon Aug 23 15:15:00 2010
@@ -46,7 +46,7 @@ public interface GenericFileProcessStrat
* @throws Exception can be thrown in case of errors
*/
boolean begin(GenericFileOperations<T> operations, GenericFileEndpoint<T> endpoint,
- Exchange exchange, GenericFile<T> file) throws Exception;
+ Exchange exchange, GenericFile<T> file) throws Exception;
/**
* Releases any file locks and possibly deletes or moves the file after
@@ -59,7 +59,7 @@ public interface GenericFileProcessStrat
* @throws Exception can be thrown in case of errors
*/
void commit(GenericFileOperations<T> operations, GenericFileEndpoint<T> endpoint,
- Exchange exchange, GenericFile<T> file) throws Exception;
+ Exchange exchange, GenericFile<T> file) throws Exception;
/**
* Releases any file locks and possibly deletes or moves the file after
@@ -72,6 +72,6 @@ public interface GenericFileProcessStrat
* @throws Exception can be thrown in case of errors
*/
void rollback(GenericFileOperations<T> operations, GenericFileEndpoint<T> endpoint,
- Exchange exchange, GenericFile<T> file) throws Exception;
+ Exchange exchange, GenericFile<T> file) throws Exception;
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileDeleteProcessStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileDeleteProcessStrategy.java?rev=988146&r1=988145&r2=988146&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileDeleteProcessStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileDeleteProcessStrategy.java Mon Aug 23 15:15:00 2010
@@ -89,7 +89,14 @@ public class GenericFileDeleteProcessStr
// moved the failed file if specifying the moveFailed option
if (failureRenamer != null) {
- GenericFile<T> newName = failureRenamer.renameFile(exchange, file);
+ // create a copy and bind the file to the exchange to be used by the renamer to evaluate the file name
+ Exchange copy = exchange.copy();
+ file.bindToExchange(copy);
+ // must preserve message id
+ copy.getIn().setMessageId(exchange.getIn().getMessageId());
+ copy.setExchangeId(exchange.getExchangeId());
+
+ GenericFile<T> newName = failureRenamer.renameFile(copy, file);
renameFile(operations, file, newName);
}
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileRenameProcessStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileRenameProcessStrategy.java?rev=988146&r1=988145&r2=988146&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileRenameProcessStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileRenameProcessStrategy.java Mon Aug 23 15:15:00 2010
@@ -16,12 +16,9 @@
*/
package org.apache.camel.component.file.strategy;
-import java.io.IOException;
-
import org.apache.camel.Exchange;
import org.apache.camel.component.file.GenericFile;
import org.apache.camel.component.file.GenericFileEndpoint;
-import org.apache.camel.component.file.GenericFileOperationFailedException;
import org.apache.camel.component.file.GenericFileOperations;
public class GenericFileRenameProcessStrategy<T> extends GenericFileProcessStrategySupport<T> {
@@ -57,7 +54,14 @@ public class GenericFileRenameProcessStr
super.rollback(operations, endpoint, exchange, file);
if (failureRenamer != null) {
- GenericFile<T> newName = failureRenamer.renameFile(exchange, file);
+ // create a copy and bind the file to the exchange to be used by the renamer to evaluate the file name
+ Exchange copy = exchange.copy();
+ file.bindToExchange(copy);
+ // must preserve message id
+ copy.getIn().setMessageId(exchange.getIn().getMessageId());
+ copy.setExchangeId(exchange.getExchangeId());
+
+ GenericFile<T> newName = failureRenamer.renameFile(copy, file);
renameFile(operations, file, newName);
}
}
@@ -68,7 +72,14 @@ public class GenericFileRenameProcessStr
super.commit(operations, endpoint, exchange, file);
if (commitRenamer != null) {
- GenericFile<T> newName = commitRenamer.renameFile(exchange, file);
+ // create a copy and bind the file to the exchange to be used by the renamer to evaluate the file name
+ Exchange copy = exchange.copy();
+ file.bindToExchange(copy);
+ // must preserve message id
+ copy.getIn().setMessageId(exchange.getIn().getMessageId());
+ copy.setExchangeId(exchange.getExchangeId());
+
+ GenericFile<T> newName = commitRenamer.renameFile(copy, file);
renameFile(operations, file, newName);
}
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/PollEnricher.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/PollEnricher.java?rev=988146&r1=988145&r2=988146&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/PollEnricher.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/PollEnricher.java Mon Aug 23 15:15:00 2010
@@ -19,13 +19,13 @@ package org.apache.camel.processor;
import org.apache.camel.Exchange;
import org.apache.camel.PollingConsumer;
import org.apache.camel.Processor;
-import org.apache.camel.impl.EventDrivenPollingConsumer;
import org.apache.camel.impl.ServiceSupport;
import org.apache.camel.processor.aggregate.AggregationStrategy;
import org.apache.camel.util.ExchangeHelper;
import org.apache.camel.util.ServiceHelper;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+
import static org.apache.camel.util.ExchangeHelper.copyResultsPreservePattern;
/**
@@ -169,18 +169,7 @@ public class PollEnricher extends Servic
* @param exchange the current exchange
*/
protected void preCheckPoll(Exchange exchange) throws Exception {
- // cannot poll a file endpoint if already consuming from a file endpoint (CAMEL-1895)
- if (consumer instanceof EventDrivenPollingConsumer) {
- EventDrivenPollingConsumer edpc = (EventDrivenPollingConsumer) consumer;
- boolean fileBasedConsumer = edpc.getEndpoint().getEndpointKey().startsWith("file") || edpc.getEndpoint().getEndpointKey().startsWith("ftp");
- boolean fileBasedExchange = exchange.getFromEndpoint() != null
- && (exchange.getFromEndpoint().getEndpointUri().startsWith("file") || exchange.getFromEndpoint().getEndpointUri().startsWith("ftp"));
- if (fileBasedConsumer && fileBasedExchange) {
- throw new IllegalArgumentException("Camel currently does not support pollEnrich from a file/ftp endpoint"
- + " when the route also started from a file/ftp endpoint."
- + " Started from: " + exchange.getFromEndpoint().getEndpointUri() + " pollEnrich: " + edpc.getEndpoint().getEndpointUri());
- }
- }
+ // noop
}
private static void prepareResult(Exchange exchange) {
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumeMoveRelativeNameTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumeMoveRelativeNameTest.java?rev=988146&r1=988145&r2=988146&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumeMoveRelativeNameTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumeMoveRelativeNameTest.java Mon Aug 23 15:15:00 2010
@@ -35,19 +35,18 @@ public class FileConsumeMoveRelativeName
super.setUp();
template.sendBodyAndHeader(fileUrl, "Bye World", Exchange.FILE_NAME, "bye.txt");
template.sendBodyAndHeader(fileUrl, "Hello World", Exchange.FILE_NAME, "sub/hello.txt");
- template.sendBodyAndHeader(fileUrl, "Godday World", Exchange.FILE_NAME, "sub/sub2/godday.txt");
+ template.sendBodyAndHeader(fileUrl, "Goodday World", Exchange.FILE_NAME, "sub/sub2/goodday.txt");
}
public void testMultiDir() throws Exception {
MockEndpoint mock = getMockEndpoint("mock:result");
- mock.expectedBodiesReceivedInAnyOrder("Bye World", "Hello World", "Godday World");
+ mock.expectedBodiesReceivedInAnyOrder("Bye World", "Hello World", "Goodday World");
mock.expectedFileExists("target/multidir/.done/bye.txt.old");
mock.expectedFileExists("target/multidir/.done/sub/hello.txt.old");
- mock.expectedFileExists("target/multidir/.done/sub/sub2/godday.txt.old");
+ mock.expectedFileExists("target/multidir/.done/sub/sub2/goodday.txt.old");
assertMockEndpointsSatisfied();
-
}
protected RouteBuilder createRouteBuilder() throws Exception {
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumePollEnrichFileTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumePollEnrichFileTest.java?rev=988146&r1=988145&r2=988146&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumePollEnrichFileTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumePollEnrichFileTest.java Mon Aug 23 15:15:00 2010
@@ -33,16 +33,14 @@ public class FileConsumePollEnrichFileTe
super.setUp();
}
-
- // TODO: CAMEL-1895
- public void xxxTestPollEnrich() throws Exception {
+ public void testPollEnrich() throws Exception {
getMockEndpoint("mock:start").expectedBodiesReceived("Start");
MockEndpoint mock = getMockEndpoint("mock:result");
mock.expectedBodiesReceived("Big file");
- mock.expectedFileExists("target/enrich/.done/AAA.fin");
- mock.expectedFileExists("target/enrichdata/.done/AAA.dat");
+ mock.expectedFileExists("target/enrich/.done/AAA.fin", "Start");
+ mock.expectedFileExists("target/enrichdata/.done/AAA.dat", "Big file");
template.sendBodyAndHeader("file://target/enrichdata", "Big file", Exchange.FILE_NAME, "AAA.dat");
template.sendBodyAndHeader("file://target/enrich", "Start", Exchange.FILE_NAME, "AAA.fin");
@@ -50,10 +48,6 @@ public class FileConsumePollEnrichFileTe
assertMockEndpointsSatisfied();
}
- public void testNothing() {
- //
- }
-
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerAbsolutePathWithAbsoluteMoveTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerAbsolutePathWithAbsoluteMoveTest.java?rev=988146&r1=988145&r2=988146&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerAbsolutePathWithAbsoluteMoveTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerAbsolutePathWithAbsoluteMoveTest.java Mon Aug 23 15:15:00 2010
@@ -51,7 +51,7 @@ public class FileConsumerAbsolutePathWit
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
public void configure() throws Exception {
- from("file://" + base + "?move=" + base + "/done/${file:name}").convertBodyTo(String.class).to("mock:report");
+ from("file://" + base + "?move=" + base + "/done/${file:onlyname}").convertBodyTo(String.class).to("mock:report");
}
};
}
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerAbsolutePathWithRelativeMoveTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerAbsolutePathWithRelativeMoveTest.java?rev=988146&r1=988145&r2=988146&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerAbsolutePathWithRelativeMoveTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerAbsolutePathWithRelativeMoveTest.java Mon Aug 23 15:15:00 2010
@@ -51,7 +51,7 @@ public class FileConsumerAbsolutePathWit
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
public void configure() throws Exception {
- from("file://" + base + "?move=../done/${file:name}").convertBodyTo(String.class).to("mock:report");
+ from("file://" + base + "?move=../done/${file:onlyname}").convertBodyTo(String.class).to("mock:report");
}
};
}
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=988146&r1=988145&r2=988146&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 Mon Aug 23 15:15:00 2010
@@ -124,7 +124,6 @@ public class FtpConsumer extends RemoteF
answer.setEndpointPath(endpointPath);
answer.setFile(file);
- answer.setFileName(file.getName());
answer.setFileNameOnly(file.getName());
answer.setFileLength(file.getSize());
if (file.getTimestamp() != null) {
@@ -146,6 +145,9 @@ public class FtpConsumer extends RemoteF
relativePath = FileUtil.stripLeadingSeparator(relativePath);
answer.setRelativeFilePath(relativePath);
+ // the file name should be the relative path
+ answer.setFileName(answer.getRelativeFilePath());
+
return answer;
}
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=988146&r1=988145&r2=988146&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 Mon Aug 23 15:15:00 2010
@@ -107,7 +107,6 @@ public class SftpConsumer extends Remote
answer.setEndpointPath(endpointPath);
answer.setFile(file);
- answer.setFileName(file.getFilename());
answer.setFileNameOnly(file.getFilename());
answer.setFileLength(file.getAttrs().getSize());
answer.setLastModified(file.getAttrs().getMTime() * 1000L);
@@ -126,6 +125,9 @@ public class SftpConsumer extends Remote
relativePath = FileUtil.stripLeadingSeparator(relativePath);
answer.setRelativeFilePath(relativePath);
+ // the file name should be the relative path
+ answer.setFileName(answer.getRelativeFilePath());
+
return answer;
}
Modified: camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerMultipleDirectoriesTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerMultipleDirectoriesTest.java?rev=988146&r1=988145&r2=988146&view=diff
==============================================================================
--- camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerMultipleDirectoriesTest.java (original)
+++ camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerMultipleDirectoriesTest.java Mon Aug 23 15:15:00 2010
@@ -58,14 +58,16 @@ public class FtpConsumerMultipleDirector
assertNotNull(file);
assertDirectoryEquals("multidir/sub/hello.txt", file.getAbsoluteFilePath());
assertDirectoryEquals("sub/hello.txt", file.getRelativeFilePath());
- assertEquals("hello.txt", file.getFileName());
+ assertEquals("sub/hello.txt", file.getFileName());
+ assertEquals("hello.txt", file.getFileNameOnly());
exchange = mock.getExchanges().get(2);
file = (RemoteFile) exchange.getProperty(FileComponent.FILE_EXCHANGE_FILE);
assertNotNull(file);
assertDirectoryEquals("multidir/sub/sub2/godday.txt", file.getAbsoluteFilePath());
assertDirectoryEquals("sub/sub2/godday.txt", file.getRelativeFilePath());
- assertEquals("godday.txt", file.getFileName());
+ assertEquals("sub/sub2/godday.txt", file.getFileName());
+ assertEquals("godday.txt", file.getFileNameOnly());
}
private void prepareFtpServer() throws Exception {