CAMEL-8586: File component optimization required for file response body. Thanks 
to Sergey Zolotaryov for the patch.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/9b380b85
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/9b380b85
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/9b380b85

Branch: refs/heads/master
Commit: 9b380b85b597382b068b9c26e20f5025e89f725c
Parents: e6e3047
Author: Claus Ibsen <davscl...@apache.org>
Authored: Mon Apr 6 12:30:20 2015 +0200
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Tue Apr 7 09:51:50 2015 +0200

----------------------------------------------------------------------
 .../camel/component/file/FileOperations.java    |  2 +-
 .../file/FileProducerFileBodyGetsMoved.java     | 78 ++++++++++++++++++++
 2 files changed, 79 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/9b380b85/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java 
b/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java
index 5bf82bb..4164a07 100644
--- 
a/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java
+++ 
b/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java
@@ -223,10 +223,10 @@ public class FileOperations implements 
GenericFileOperations<File> {
                 Object body = exchange.getIn().getBody();
                 if (body instanceof WrappedFile) {
                     body = ((WrappedFile<?>) body).getFile();
-                    fileBased = true;
                 }
                 if (body instanceof File) {
                     source = (File) body;
+                    fileBased = true;
                 }
             }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/9b380b85/camel-core/src/test/java/org/apache/camel/component/file/FileProducerFileBodyGetsMoved.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/test/java/org/apache/camel/component/file/FileProducerFileBodyGetsMoved.java
 
b/camel-core/src/test/java/org/apache/camel/component/file/FileProducerFileBodyGetsMoved.java
new file mode 100644
index 0000000..2e5aca9
--- /dev/null
+++ 
b/camel-core/src/test/java/org/apache/camel/component/file/FileProducerFileBodyGetsMoved.java
@@ -0,0 +1,78 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.file;
+
+import java.io.File;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Checks that body of type {@link java.io.File} is simply moved avoiding
+ * copying using IO streams.
+ */
+public class FileProducerFileBodyGetsMoved extends ContextTestSupport {
+
+    @Before
+    @Override
+    protected void setUp() throws Exception {
+        deleteDirectory("target/filemove");
+        super.setUp();
+    }
+    
+    @Test
+    public void testStoreFileExchangeBodyIsFile() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedFileExists("target/filemove/testStoreFile");
+        mock.expectedMessageCount(1);
+        File temporaryFile = File.createTempFile("camel", "test");
+
+        template.requestBodyAndHeader("direct:in", temporaryFile, 
Exchange.FILE_LOCAL_WORK_PATH, temporaryFile);
+
+        mock.assertIsSatisfied();
+        assertFalse("Temporary body file should have been moved, not copied", 
temporaryFile.exists());
+    }
+
+    @Test
+    public void testStoreFileExchangeBodyIsWrappedFile() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedFileExists("target/filemove/testStoreFile");
+        mock.expectedMessageCount(1);
+        File temporaryFile = File.createTempFile("camel", "test");
+
+        GenericFile<File> body = new GenericFile<File>();
+        body.setFile(temporaryFile);
+        template.requestBodyAndHeader("direct:in", temporaryFile, 
Exchange.FILE_LOCAL_WORK_PATH, temporaryFile);
+
+        mock.assertIsSatisfied();
+        assertFalse("Temporary body file should have been moved, not copied", 
temporaryFile.exists());
+    }
+
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            public void configure() throws Exception {
+                
from("direct:in").to("file://target/filemove/?fileName=testStoreFile")
+                    .to("mock:result");
+            }
+        };
+    }
+
+}

Reply via email to