Repository: camel
Updated Branches:
  refs/heads/camel-2.16.x 958b66b60 -> b4b8c656a
  refs/heads/master 0a36e769a -> 19e63dbaf


Changed the DynamicColumnMarshaller to always use the record map to define the 
columns. This allows the marshaller to be reused for asymmetric records.


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

Branch: refs/heads/master
Commit: bbc905eb6f6ef03d139e74b2fb37b63e09fd8880
Parents: 0a36e76
Author: Fabricio Toresan <fabricio.tore...@senior.com.br>
Authored: Mon Nov 30 16:42:37 2015 -0200
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Sat Dec 5 09:53:19 2015 +0100

----------------------------------------------------------------------
 .../org/apache/camel/dataformat/csv/CsvMarshaller.java  |  8 ++------
 .../org/apache/camel/dataformat/csv/CsvMarshalTest.java | 12 ++++++++++++
 2 files changed, 14 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/bbc905eb/components/camel-csv/src/main/java/org/apache/camel/dataformat/csv/CsvMarshaller.java
----------------------------------------------------------------------
diff --git 
a/components/camel-csv/src/main/java/org/apache/camel/dataformat/csv/CsvMarshaller.java
 
b/components/camel-csv/src/main/java/org/apache/camel/dataformat/csv/CsvMarshaller.java
index f23f1ec..2764d5e 100644
--- 
a/components/camel-csv/src/main/java/org/apache/camel/dataformat/csv/CsvMarshaller.java
+++ 
b/components/camel-csv/src/main/java/org/apache/camel/dataformat/csv/CsvMarshaller.java
@@ -22,7 +22,6 @@ import java.io.OutputStreamWriter;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Iterator;
-import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 
@@ -130,17 +129,14 @@ abstract class CsvMarshaller {
      * This marshaller adapts the columns but always keep them in the same 
order
      */
     private static final class DynamicColumnsMarshaller extends CsvMarshaller {
-        private final LinkedHashSet<Object> columns = new 
LinkedHashSet<Object>();
-
         private DynamicColumnsMarshaller(CSVFormat format) {
             super(format);
         }
 
         @Override
         protected Iterable<?> getMapRecordValues(Map<?, ?> map) {
-            columns.addAll(map.keySet());
-            List<Object> result = new ArrayList<Object>(columns.size());
-            for (Object key : columns) {
+            List<Object> result = new ArrayList<Object>(map.size());
+            for (Object key : map.keySet()) {
                 result.add(map.get(key));
             }
             return result;

http://git-wip-us.apache.org/repos/asf/camel/blob/bbc905eb/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalTest.java
 
b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalTest.java
index f232ad5..8f44d9b 100644
--- 
a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalTest.java
+++ 
b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalTest.java
@@ -98,6 +98,18 @@ public class CsvMarshalTest extends CamelTestSupport {
         assertArrayEquals(new String[]{"A,C", "1,3", "one,three"}, 
readOutputLines());
     }
 
+    @Test
+    public void shouldMarshalDifferentDynamicColumns() throws Exception {
+       output.expectedMessageCount(2);
+       
+       template.sendBody("direct:default", TestUtils.asMap("A", "1", "B", 
"2"));       
+       template.sendBody("direct:default", TestUtils.asMap("X", "1", "Y", "2", 
"Z", "3"));
+       
+       output.assertIsSatisfied();
+       assertArrayEquals(new String[]{"1,2"}, readOutputLines());
+       assertArrayEquals(new String[]{"1,2,3"}, 
output.getExchanges().get(1).getIn().getBody(String.class).split("\r\n|\r|\n"));
+    }
+    
 
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {

Reply via email to