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