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 <ningji...@apache.org> Authored: Mon Jul 15 15:27:15 2013 +0800 Committer: Willem Jiang <ningji...@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; + } + + }; + } }