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 {