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 2015/12/25 11:58:59 UTC

camel git commit: CAMEL-9275: camel-jackson - Allow to use a custom ObjectMapper instance

Repository: camel
Updated Branches:
  refs/heads/master 69421bf3d -> e4b2eb8b5


CAMEL-9275: camel-jackson - Allow to use a custom ObjectMapper instance


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

Branch: refs/heads/master
Commit: e4b2eb8b568889fe35a5722696e710bd64afcde0
Parents: 69421bf
Author: Claus Ibsen <da...@apache.org>
Authored: Fri Dec 25 11:58:50 2015 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Dec 25 11:58:50 2015 +0100

----------------------------------------------------------------------
 .../model/dataformat/JacksonXMLDataFormat.java  | 16 ++++++
 .../camel/model/dataformat/JsonDataFormat.java  | 16 ++++++
 .../component/jackson/JacksonDataFormat.java    | 18 ++++---
 .../jackson/JacksonObjectMapperTest.java        | 51 ++++++++++++++++++++
 .../jacksonxml/JacksonXMLDataFormat.java        | 18 ++++---
 5 files changed, 107 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/e4b2eb8b/camel-core/src/main/java/org/apache/camel/model/dataformat/JacksonXMLDataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/dataformat/JacksonXMLDataFormat.java b/camel-core/src/main/java/org/apache/camel/model/dataformat/JacksonXMLDataFormat.java
index 13c1f1f..3455bb4 100644
--- a/camel-core/src/main/java/org/apache/camel/model/dataformat/JacksonXMLDataFormat.java
+++ b/camel-core/src/main/java/org/apache/camel/model/dataformat/JacksonXMLDataFormat.java
@@ -39,6 +39,8 @@ import org.apache.camel.util.ObjectHelper;
 @XmlAccessorType(XmlAccessType.FIELD)
 public class JacksonXMLDataFormat extends DataFormatDefinition {
     @XmlAttribute
+    private String xmlMapper;
+    @XmlAttribute
     private Boolean prettyPrint;
     @XmlAttribute
     private String unmarshalTypeName;
@@ -71,6 +73,17 @@ public class JacksonXMLDataFormat extends DataFormatDefinition {
         super("jacksonxml");
     }
 
+    public String getXmlMapper() {
+        return xmlMapper;
+    }
+
+    /**
+     * Lookup and use the existing XmlMapper with the given id.
+     */
+    public void setXmlMapper(String xmlMapper) {
+        this.xmlMapper = xmlMapper;
+    }
+
     public Boolean getPrettyPrint() {
         return prettyPrint;
     }
@@ -272,6 +285,9 @@ public class JacksonXMLDataFormat extends DataFormatDefinition {
 
     @Override
     protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) {
+        if (xmlMapper != null) {
+            setProperty(camelContext, dataFormat, "xmlMapper", xmlMapper);
+        }
         if (unmarshalType != null) {
             setProperty(camelContext, dataFormat, "unmarshalType", unmarshalType);
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/e4b2eb8b/camel-core/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java b/camel-core/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java
index f20aa41..4223c1a 100644
--- a/camel-core/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java
+++ b/camel-core/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java
@@ -40,6 +40,8 @@ import org.apache.camel.util.ObjectHelper;
 @XmlAccessorType(XmlAccessType.FIELD)
 public class JsonDataFormat extends DataFormatDefinition {
     @XmlAttribute
+    private String objectMapper;
+    @XmlAttribute
     private Boolean prettyPrint;
     @XmlAttribute @Metadata(defaultValue = "XStream")
     private JsonLibrary library = JsonLibrary.XStream;
@@ -80,6 +82,17 @@ public class JsonDataFormat extends DataFormatDefinition {
         this.library = library;
     }
 
+    public String getObjectMapper() {
+        return objectMapper;
+    }
+
+    /**
+     * Lookup and use the existing ObjectMapper with the given id when using Jackson.
+     */
+    public void setObjectMapper(String objectMapper) {
+        this.objectMapper = objectMapper;
+    }
+
     public Boolean getPrettyPrint() {
         return prettyPrint;
     }
@@ -328,6 +341,9 @@ public class JsonDataFormat extends DataFormatDefinition {
 
     @Override
     protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) {
+        if (objectMapper != null) {
+            setProperty(camelContext, dataFormat, "objectMapper", objectMapper);
+        }
         if (unmarshalType != null) {
             setProperty(camelContext, dataFormat, "unmarshalType", unmarshalType);
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/e4b2eb8b/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 381b81a..947eac6 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
@@ -52,8 +52,8 @@ public class JacksonDataFormat extends ServiceSupport implements DataFormat, Dat
 
     private static final Logger LOG = LoggerFactory.getLogger(JacksonDataFormat.class);
 
-    private final ObjectMapper objectMapper;
     private CamelContext camelContext;
+    private ObjectMapper objectMapper;
     private Class<? extends Collection> collectionType;
     private List<Module> modules;
     private String moduleClassNames;
@@ -108,7 +108,6 @@ public class JacksonDataFormat extends ServiceSupport implements DataFormat, Dat
      * @param enableJaxbAnnotationModule if it is true, will enable the JaxbAnnotationModule.
      */
     public JacksonDataFormat(Class<?> unmarshalType, Class<?> jsonView, boolean enableJaxbAnnotationModule) {
-        this.objectMapper = new ObjectMapper();
         this.unmarshalType = unmarshalType;
         this.jsonView = jsonView;
         this.enableJaxbAnnotationModule = enableJaxbAnnotationModule;
@@ -177,6 +176,14 @@ public class JacksonDataFormat extends ServiceSupport implements DataFormat, Dat
     // Properties
     // -------------------------------------------------------------------------
 
+    public ObjectMapper getObjectMapper() {
+        return this.objectMapper;
+    }
+
+    public void setObjectMapper(ObjectMapper objectMapper) {
+        this.objectMapper = objectMapper;
+    }
+
     public Class<?> getUnmarshalType() {
         return this.unmarshalType;
     }
@@ -201,10 +208,6 @@ public class JacksonDataFormat extends ServiceSupport implements DataFormat, Dat
         this.jsonView = jsonView;
     }
 
-    public ObjectMapper getObjectMapper() {
-        return this.objectMapper;
-    }
-
     public String getInclude() {
         return include;
     }
@@ -398,6 +401,9 @@ public class JacksonDataFormat extends ServiceSupport implements DataFormat, Dat
 
     @Override
     protected void doStart() throws Exception {
+        if (objectMapper == null) {
+            objectMapper = new ObjectMapper();
+        }
         
         if (enableJaxbAnnotationModule) {
             // Enables JAXB processing

http://git-wip-us.apache.org/repos/asf/camel/blob/e4b2eb8b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonObjectMapperTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonObjectMapperTest.java b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonObjectMapperTest.java
new file mode 100644
index 0000000..590b3d8
--- /dev/null
+++ b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonObjectMapperTest.java
@@ -0,0 +1,51 @@
+/**
+ * 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 com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.camel.builder.RouteBuilder;
+
+public class JacksonObjectMapperTest extends JacksonMarshalTest {
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+
+            @Override
+            public void configure() throws Exception {
+                ObjectMapper mapper = new ObjectMapper();
+                JacksonDataFormat format = new JacksonDataFormat();
+                format.setObjectMapper(mapper);
+
+                from("direct:in").marshal(format);
+                from("direct:back").unmarshal(format).to("mock:reverse");
+
+                JacksonDataFormat prettyPrintDataFormat = new JacksonDataFormat();
+                prettyPrintDataFormat.setPrettyPrint(true);
+
+                from("direct:inPretty").marshal(prettyPrintDataFormat);
+                from("direct:backPretty").unmarshal(prettyPrintDataFormat).to("mock:reverse");
+
+                JacksonDataFormat formatPojo = new JacksonDataFormat(TestPojo.class);
+
+                from("direct:inPojo").marshal(formatPojo);
+                from("direct:backPojo").unmarshal(formatPojo).to("mock:reversePojo");
+            }
+        };
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/e4b2eb8b/components/camel-jacksonxml/src/main/java/org/apache/camel/component/jacksonxml/JacksonXMLDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-jacksonxml/src/main/java/org/apache/camel/component/jacksonxml/JacksonXMLDataFormat.java b/components/camel-jacksonxml/src/main/java/org/apache/camel/component/jacksonxml/JacksonXMLDataFormat.java
index 531877b..869fe66 100644
--- a/components/camel-jacksonxml/src/main/java/org/apache/camel/component/jacksonxml/JacksonXMLDataFormat.java
+++ b/components/camel-jacksonxml/src/main/java/org/apache/camel/component/jacksonxml/JacksonXMLDataFormat.java
@@ -52,8 +52,8 @@ public class JacksonXMLDataFormat extends ServiceSupport implements DataFormat,
 
     private static final Logger LOG = LoggerFactory.getLogger(JacksonXMLDataFormat.class);
 
-    private final XmlMapper xmlMapper;
     private CamelContext camelContext;
+    private XmlMapper xmlMapper;
     private Class<? extends Collection> collectionType;
     private List<Module> modules;
     private String moduleClassNames;
@@ -108,7 +108,6 @@ public class JacksonXMLDataFormat extends ServiceSupport implements DataFormat,
      * @param enableJaxbAnnotationModule if it is true, will enable the JaxbAnnotationModule.
      */
     public JacksonXMLDataFormat(Class<?> unmarshalType, Class<?> jsonView, boolean enableJaxbAnnotationModule) {
-        this.xmlMapper = new XmlMapper();
         this.unmarshalType = unmarshalType;
         this.jsonView = jsonView;
         this.enableJaxbAnnotationModule = enableJaxbAnnotationModule;
@@ -177,6 +176,14 @@ public class JacksonXMLDataFormat extends ServiceSupport implements DataFormat,
     // Properties
     // -------------------------------------------------------------------------
 
+    public XmlMapper getXmlMapper() {
+        return this.xmlMapper;
+    }
+
+    public void setXmlMapper(XmlMapper xmlMapper) {
+        this.xmlMapper = xmlMapper;
+    }
+
     public Class<?> getUnmarshalType() {
         return this.unmarshalType;
     }
@@ -201,10 +208,6 @@ public class JacksonXMLDataFormat extends ServiceSupport implements DataFormat,
         this.jsonView = jsonView;
     }
 
-    public XmlMapper getXmlMapper() {
-        return this.xmlMapper;
-    }
-
     public String getInclude() {
         return include;
     }
@@ -398,6 +401,9 @@ public class JacksonXMLDataFormat extends ServiceSupport implements DataFormat,
 
     @Override
     protected void doStart() throws Exception {
+        if (xmlMapper == null) {
+            xmlMapper = new XmlMapper();
+        }
 
         if (enableJaxbAnnotationModule) {
             // Enables JAXB processing