You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2013/06/25 11:08:58 UTC

[5/7] git commit: CAMEL-6446: camel-jackson support using JAXB annotations. Thanks to Chris Geer for the patch.

CAMEL-6446: camel-jackson support using JAXB annotations. Thanks to Chris Geer for the patch.


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

Branch: refs/heads/camel-2.11.x
Commit: 274d018daf0abe117f31d8858dd5ead31991a6ed
Parents: bb2afbb
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Jun 25 11:05:14 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Jun 25 11:06:06 2013 +0200

----------------------------------------------------------------------
 components/camel-jackson/pom.xml                |  5 ++
 .../component/jackson/JacksonDataFormat.java    | 13 +++-
 .../jackson/JacksonJAXBAnnotationTest.java      | 65 ++++++++++++++++++++
 .../camel/component/jackson/TestJAXBPojo.java   | 50 +++++++++++++++
 .../features/src/main/resources/features.xml    |  1 +
 5 files changed, 131 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/274d018d/components/camel-jackson/pom.xml
----------------------------------------------------------------------
diff --git a/components/camel-jackson/pom.xml b/components/camel-jackson/pom.xml
index d15f8d2..85c40d5 100644
--- a/components/camel-jackson/pom.xml
+++ b/components/camel-jackson/pom.xml
@@ -45,6 +45,11 @@
           <artifactId>jackson-databind</artifactId>
           <version>${jackson2-version}</version>
         </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.module</groupId>
+            <artifactId>jackson-module-jaxb-annotations</artifactId>
+            <version>${jackson2-version}</version>
+        </dependency>
 
         <!-- testing -->
         <dependency>

http://git-wip-us.apache.org/repos/asf/camel/blob/274d018d/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/JacksonDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/JacksonDataFormat.java b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/JacksonDataFormat.java
index 2b8246f..231adf7 100644
--- a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/JacksonDataFormat.java
+++ b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/JacksonDataFormat.java
@@ -22,6 +22,7 @@ import java.util.HashMap;
 import java.util.Map;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
@@ -41,7 +42,7 @@ public class JacksonDataFormat implements DataFormat {
      * Use the default Jackson {@link ObjectMapper} and {@link Map}
      */
     public JacksonDataFormat() {
-        this(new ObjectMapper(), HashMap.class);
+        this(HashMap.class);
     }
 
     /**
@@ -51,7 +52,7 @@ public class JacksonDataFormat implements DataFormat {
      * @param unmarshalType the custom unmarshal type
      */
     public JacksonDataFormat(Class<?> unmarshalType) {
-        this(new ObjectMapper(), unmarshalType);
+        this(unmarshalType, null);
     }
 
     /**
@@ -63,7 +64,13 @@ public class JacksonDataFormat implements DataFormat {
      *                 See also http://wiki.fasterxml.com/JacksonJsonViews
      */
     public JacksonDataFormat(Class<?> unmarshalType, Class<?> jsonView) {
-        this(new ObjectMapper(), unmarshalType, jsonView);
+        this.objectMapper = new ObjectMapper();
+        this.unmarshalType = unmarshalType;
+        this.jsonView = jsonView;
+
+        // Enables JAXB processing
+        JaxbAnnotationModule module = new JaxbAnnotationModule();
+        this.objectMapper.registerModule(module);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/camel/blob/274d018d/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonJAXBAnnotationTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonJAXBAnnotationTest.java b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonJAXBAnnotationTest.java
new file mode 100644
index 0000000..91afad8
--- /dev/null
+++ b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonJAXBAnnotationTest.java
@@ -0,0 +1,65 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.jackson;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class JacksonJAXBAnnotationTest extends CamelTestSupport {
+
+    @Test
+    public void testMarshalJAXBObject() throws Exception {
+        TestJAXBPojo in = new TestJAXBPojo();
+        in.setName("Camel");
+
+        MockEndpoint mock = getMockEndpoint("mock:reversePojo");
+        mock.expectedMessageCount(1);
+        mock.message(0).body().isInstanceOf(TestJAXBPojo.class);
+        mock.message(0).body().equals(in);
+
+        Object marshalled = template.requestBody("direct:inPojo", in);
+        String marshalledAsString = context.getTypeConverter().convertTo(String.class, marshalled);
+        assertEquals("{\"PojoName\":\"Camel\"}", marshalledAsString);
+
+        template.sendBody("direct:backPojo", marshalled);
+
+        mock.assertIsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+
+            @Override
+            public void configure() throws Exception {
+
+                JacksonDataFormat format = new JacksonDataFormat();
+
+                from("direct:in").marshal(format);
+                from("direct:back").unmarshal(format).to("mock:reverse");
+
+                JacksonDataFormat formatPojo = new JacksonDataFormat(TestJAXBPojo.class);
+
+                from("direct:inPojo").marshal(formatPojo);
+                from("direct:backPojo").unmarshal(formatPojo).to("mock:reversePojo");
+
+            }
+        };
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/274d018d/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/TestJAXBPojo.java
----------------------------------------------------------------------
diff --git a/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/TestJAXBPojo.java b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/TestJAXBPojo.java
new file mode 100644
index 0000000..20cee37
--- /dev/null
+++ b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/TestJAXBPojo.java
@@ -0,0 +1,50 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.jackson;
+
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement(name = "XMLPojo")
+public class TestJAXBPojo {
+
+    @XmlElement(name = "PojoName")
+    private String name;
+
+    public String getName() {
+        return this.name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        return this.name.equals(((TestPojo) obj).getName());
+    }
+
+    @Override
+    public int hashCode() {
+        return name != null ? name.hashCode() : 0;
+    }
+
+    @Override
+    public String toString() {
+        return "TestJAXBPojo[" + name + "]";
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/274d018d/platforms/karaf/features/src/main/resources/features.xml
----------------------------------------------------------------------
diff --git a/platforms/karaf/features/src/main/resources/features.xml b/platforms/karaf/features/src/main/resources/features.xml
index aa4ad1b..9d5a7b9 100644
--- a/platforms/karaf/features/src/main/resources/features.xml
+++ b/platforms/karaf/features/src/main/resources/features.xml
@@ -458,6 +458,7 @@
     <bundle dependency='true'>mvn:com.fasterxml.jackson.core/jackson-core/${jackson2-version}</bundle>
     <bundle dependency='true'>mvn:com.fasterxml.jackson.core/jackson-databind/${jackson2-version}</bundle>
     <bundle dependency='true'>mvn:com.fasterxml.jackson.core/jackson-annotations/${jackson2-version}</bundle>
+    <bundle dependency='true'>mvn:com.fasterxml.jackson.module/jackson-module-jaxb-annotations/${jackson2-version}</bundle>
     <feature version='${project.version}'>camel-core</feature>
     <bundle>mvn:org.apache.camel/camel-jackson/${project.version}</bundle>
   </feature>