CAMEL-10646: jsonpath now supports POJOs if jackson is on the classpath

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

Branch: refs/heads/master
Commit: de9cc2581eb4a3e6207ad0a7d7937017e0cb3af4
Parents: 0a3efe2
Author: Claus Ibsen <davscl...@apache.org>
Authored: Fri Dec 23 13:00:41 2016 +0100
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Fri Dec 23 13:00:41 2016 +0100

----------------------------------------------------------------------
 .../apache/camel/jsonpath/JsonPathAdapter.java  |  8 +++++++
 .../apache/camel/jsonpath/JsonPathEngine.java   |  1 +
 .../jsonpath/jackson/JacksonJsonAdapter.java    | 24 ++++++++++++++++----
 3 files changed, 29 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/de9cc258/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathAdapter.java
----------------------------------------------------------------------
diff --git 
a/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathAdapter.java
 
b/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathAdapter.java
index 41e0903..bcba3da 100644
--- 
a/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathAdapter.java
+++ 
b/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathAdapter.java
@@ -18,11 +18,19 @@ package org.apache.camel.jsonpath;
 
 import java.util.Map;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 
 public interface JsonPathAdapter {
 
     /**
+     * Initializes the adapter
+     *
+     * @param camelContext the CamelContext
+     */
+    void init(CamelContext camelContext);
+
+    /**
      * Attempt to read/convert the message body into a {@link Map} type
      *
      * @param body the message body

http://git-wip-us.apache.org/repos/asf/camel/blob/de9cc258/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathEngine.java
----------------------------------------------------------------------
diff --git 
a/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathEngine.java
 
b/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathEngine.java
index 0816e30..8224bd2 100644
--- 
a/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathEngine.java
+++ 
b/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathEngine.java
@@ -191,6 +191,7 @@ public class JsonPathEngine {
                     Object obj = 
exchange.getContext().getInjector().newInstance(clazz);
                     if (obj instanceof JsonPathAdapter) {
                         adapter = (JsonPathAdapter) obj;
+                        adapter.init(exchange.getContext());
                         LOG.debug("JacksonJsonAdapter found on classpath and 
enabled for camel-jsonpath: {}", adapter);
                     }
                 }

http://git-wip-us.apache.org/repos/asf/camel/blob/de9cc258/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/jackson/JacksonJsonAdapter.java
----------------------------------------------------------------------
diff --git 
a/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/jackson/JacksonJsonAdapter.java
 
b/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/jackson/JacksonJsonAdapter.java
index f109628..0cb5837 100644
--- 
a/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/jackson/JacksonJsonAdapter.java
+++ 
b/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/jackson/JacksonJsonAdapter.java
@@ -19,8 +19,9 @@ package org.apache.camel.jsonpath.jackson;
 import java.util.Map;
 import java.util.Set;
 
+import com.fasterxml.jackson.databind.Module;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;
+import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.jsonpath.JsonPathAdapter;
 import org.apache.camel.spi.Registry;
@@ -31,13 +32,28 @@ import org.apache.camel.spi.Registry;
  */
 public class JacksonJsonAdapter implements JsonPathAdapter {
 
+    private static final String JACKSON_JAXB_MODULE = 
"com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule";
+
     private final ObjectMapper defaultMapper;
+    private CamelContext camelContext;
 
     public JacksonJsonAdapter() {
         defaultMapper = new ObjectMapper();
-        // Enables JAXB processing so we can easily convert JAXB annotated 
pojos also
-        JaxbAnnotationModule module = new JaxbAnnotationModule();
-        defaultMapper.registerModule(module);
+    }
+
+    @Override
+    public void init(CamelContext camelContext) {
+        this.camelContext = camelContext;
+
+        // Attempt to enables JAXB processing so we can easily convert JAXB 
annotated pojos also
+        Class<?> clazz = 
camelContext.getClassResolver().resolveClass(JACKSON_JAXB_MODULE);
+        if (clazz != null) {
+            Object obj = camelContext.getInjector().newInstance(clazz);
+            if (obj instanceof Module) {
+                Module module = (Module) obj;
+                defaultMapper.registerModule(module);
+            }
+        }
     }
 
     @Override

Reply via email to