Repository: camel Updated Branches: refs/heads/master 9e9a791bb -> 01f6b12bb
[CAMEL-9258] camel-boon - Serializing/Deserializing Lists, Maps with camel-boon. Improve testing too. Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/ba818f68 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/ba818f68 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/ba818f68 Branch: refs/heads/master Commit: ba818f68870e491b04d70b469b02cdf25cc81c69 Parents: 9e9a791 Author: Andrea Cosentino <[email protected]> Authored: Mon Dec 28 10:44:45 2015 +0100 Committer: Andrea Cosentino <[email protected]> Committed: Mon Dec 28 10:44:45 2015 +0100 ---------------------------------------------------------------------- .../camel/component/boon/BoonDataFormat.java | 18 +++++++ .../component/boon/BoonDataFormatTest.java | 57 ++++++++++++++++++++ 2 files changed, 75 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/ba818f68/components/camel-boon/src/main/java/org/apache/camel/component/boon/BoonDataFormat.java ---------------------------------------------------------------------- diff --git a/components/camel-boon/src/main/java/org/apache/camel/component/boon/BoonDataFormat.java b/components/camel-boon/src/main/java/org/apache/camel/component/boon/BoonDataFormat.java index 09a5c10..e1e42cd 100644 --- a/components/camel-boon/src/main/java/org/apache/camel/component/boon/BoonDataFormat.java +++ b/components/camel-boon/src/main/java/org/apache/camel/component/boon/BoonDataFormat.java @@ -22,7 +22,10 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; +import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; +import java.util.List; import org.apache.camel.Exchange; import org.apache.camel.spi.DataFormat; @@ -42,6 +45,7 @@ public class BoonDataFormat extends ChildServiceSupport implements DataFormat, D private final ObjectMapper objectMapper; private Class<?> unmarshalType; + private boolean useList; public BoonDataFormat() { this(HashMap.class); @@ -112,5 +116,19 @@ public class BoonDataFormat extends ChildServiceSupport implements DataFormat, D public ObjectMapper getObjectMapper() { return this.objectMapper; } + + public boolean isUseList() { + return useList; + } + + public void setUseList(boolean useList) { + this.useList = useList; + } + /** + * Uses {@link java.util.List} when unmarshalling. + */ + public void useList() { + setUnmarshalType(List.class); + } } http://git-wip-us.apache.org/repos/asf/camel/blob/ba818f68/components/camel-boon/src/test/java/org/apache/camel/component/boon/BoonDataFormatTest.java ---------------------------------------------------------------------- diff --git a/components/camel-boon/src/test/java/org/apache/camel/component/boon/BoonDataFormatTest.java b/components/camel-boon/src/test/java/org/apache/camel/component/boon/BoonDataFormatTest.java index ade07ba..81f3123 100644 --- a/components/camel-boon/src/test/java/org/apache/camel/component/boon/BoonDataFormatTest.java +++ b/components/camel-boon/src/test/java/org/apache/camel/component/boon/BoonDataFormatTest.java @@ -16,7 +16,9 @@ */ package org.apache.camel.component.boon; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.apache.camel.builder.RouteBuilder; @@ -63,6 +65,50 @@ public class BoonDataFormatTest extends CamelTestSupport { mock.assertIsSatisfied(); } + + @Test + public void testMarshalAndUnmarshalList() throws Exception { + List<String> in = new ArrayList<String>(); + in.add("Karaf"); + in.add("Camel"); + in.add("Servicemix"); + + MockEndpoint mock = getMockEndpoint("mock:reverseList"); + mock.expectedMessageCount(1); + mock.message(0).body().isInstanceOf(List.class); + mock.message(0).body().equals(in); + + Object marshalled = template.requestBody("direct:inList", in); + String marshalledAsString = context.getTypeConverter().convertTo(String.class, marshalled); + assertEquals("[\"Karaf\",\"Camel\",\"Servicemix\"]", marshalledAsString); + + template.sendBody("direct:backList", marshalled); + + mock.assertIsSatisfied(); + } + + @Test + public void testMarshalAndUnmarshalPojoMap() throws Exception { + TestPojo in = new TestPojo(); + in.setName("Camel"); + + HashMap<String,TestPojo> map = new HashMap<String,TestPojo>(); + map.put("test1", in); + map.put("test2", in); + + MockEndpoint mock = getMockEndpoint("mock:reversePojosMap"); + mock.expectedMessageCount(1); + mock.message(0).body().isInstanceOf(HashMap.class); + mock.message(0).body().equals(map); + + Object marshalled = template.requestBody("direct:inPojosMap", map); + String marshalledAsString = context.getTypeConverter().convertTo(String.class, marshalled); + assertEquals("{\"test1\":{\"name\":\"Camel\"},\"test2\":{\"name\":\"Camel\"}}", marshalledAsString); + + template.sendBody("direct:backPojosMap", marshalled); + + mock.assertIsSatisfied(); + } @Override protected RouteBuilder createRouteBuilder() throws Exception { @@ -78,6 +124,17 @@ public class BoonDataFormatTest extends CamelTestSupport { from("direct:inPojo").marshal(formatPojo); from("direct:backPojo").unmarshal(formatPojo).to("mock:reversePojo"); + + BoonDataFormat formatList = new BoonDataFormat(); + formatList.useList(); + + from("direct:inList").marshal(formatList); + from("direct:backList").unmarshal(formatList).to("mock:reverseList"); + + BoonDataFormat formatPojoMaps = new BoonDataFormat(); + + from("direct:inPojosMap").marshal(formatPojoMaps); + from("direct:backPojosMap").unmarshal(formatPojoMaps).to("mock:reversePojosMap"); } }; }
