You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2013/07/15 09:27:52 UTC

git commit: CAMEL-6139 fixed the issue that message headers is not set rightly.

Updated Branches:
  refs/heads/master 83016eeb4 -> 46a9c2b01


CAMEL-6139 fixed the issue that message headers is not set rightly.


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

Branch: refs/heads/master
Commit: 46a9c2b018f61824ed27a168daed5759318712b4
Parents: 83016ee
Author: Willem Jiang <ni...@apache.org>
Authored: Mon Jul 15 15:27:15 2013 +0800
Committer: Willem Jiang <ni...@apache.org>
Committed: Mon Jul 15 15:27:15 2013 +0800

----------------------------------------------------------------------
 .../camel/dataformat/zipfile/ZipIterator.java   |  2 +-
 .../ZipFileMultipleFilesSplitterTest.java       | 38 +++++++++++++++++++-
 2 files changed, 38 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/46a9c2b0/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipIterator.java
----------------------------------------------------------------------
diff --git a/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipIterator.java b/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipIterator.java
index a7f1d65..d4ac227 100644
--- a/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipIterator.java
+++ b/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipIterator.java
@@ -97,7 +97,7 @@ class ZipIterator implements Iterator<Message> {
                 if (current != null) {
                     LOGGER.debug("read zipEntry {}", current.getName());
                     answer = new DefaultMessage();
-                    answer.setHeaders(inputMessage.getHeaders());
+                    answer.getHeaders().putAll(inputMessage.getHeaders());
                     answer.setHeader("zipFileName", current.getName());
                     answer.setHeader(Exchange.FILE_NAME, current.getName());
                     answer.setBody(new ZipInputStreamWrapper(zipInputStream));

http://git-wip-us.apache.org/repos/asf/camel/blob/46a9c2b0/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/ZipFileMultipleFilesSplitterTest.java
----------------------------------------------------------------------
diff --git a/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/ZipFileMultipleFilesSplitterTest.java b/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/ZipFileMultipleFilesSplitterTest.java
index e60e6c1..54b5e54 100644
--- a/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/ZipFileMultipleFilesSplitterTest.java
+++ b/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/ZipFileMultipleFilesSplitterTest.java
@@ -18,9 +18,23 @@ package org.apache.camel.dataformat.zipfile;
 
 import java.util.Iterator;
 
+import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.processor.aggregate.AggregationStrategy;
+import org.junit.Test;
 
 public class ZipFileMultipleFilesSplitterTest extends ZipSplitterRouteTest {
+    static final String PROCESSED_FILES_HEADER_NAME = "processedFiles";
+    
+    @Test
+    public void testSplitter() throws InterruptedException {
+        MockEndpoint processZipEntry = getMockEndpoint("mock:processZipEntry");
+        MockEndpoint splitResult = getMockEndpoint("mock:splitResult");
+        processZipEntry.expectedBodiesReceivedInAnyOrder("chau", "hi", "hola");
+        splitResult.expectedBodiesReceivedInAnyOrder("chiau.txt", "hi.txt", "hola.txt");
+        assertMockEndpointsSatisfied();
+    }
     
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
@@ -34,13 +48,35 @@ public class ZipFileMultipleFilesSplitterTest extends ZipSplitterRouteTest {
                         .unmarshal(zipFile)
                         .split(body(Iterator.class))
                         .streaming()
+                        .aggregationStrategy(updateHeader())
                         .convertBodyTo(String.class)
                         .to("mock:processZipEntry")
                         .end()
-                        .log("Done processing big file: ${header.CamelFileName}");
+                        .log("Done processing big file: ${header.CamelFileName}")
+                        .setBody().header(PROCESSED_FILES_HEADER_NAME)
+                        .split().body()
+                        .to("mock:splitResult");
             }
         };
 
     }
+    
+    private AggregationStrategy updateHeader() {
+        return new AggregationStrategy() {
+            @Override
+            public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
+                if (oldExchange != null) {
+                    String processedFiles = oldExchange.getIn().getHeader(PROCESSED_FILES_HEADER_NAME, String.class);
+                    if (processedFiles == null) {
+                        processedFiles = oldExchange.getIn().getHeader("zipFileName", String.class);
+                    }
+                    processedFiles = processedFiles + "," + newExchange.getIn().getHeader("zipFileName", String.class);
+                    newExchange.getIn().setHeader(PROCESSED_FILES_HEADER_NAME, processedFiles);
+                }
+                return newExchange;
+            }
+            
+        };
+    }
 
 }