Repository: camel Updated Branches: refs/heads/master e4b5ecc4a -> 15cdf38f5
[CAMEL-8554] Jackson mapper can be read from the registry. Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/15cdf38f Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/15cdf38f Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/15cdf38f Branch: refs/heads/master Commit: 15cdf38f578018aa2b4d86707b03ef44dd965d3c Parents: e4b5ecc Author: Henryk Konsek <hekon...@gmail.com> Authored: Thu Apr 9 22:35:19 2015 +0200 Committer: Henryk Konsek <hekon...@gmail.com> Committed: Thu Apr 9 22:35:19 2015 +0200 ---------------------------------------------------------------------- components/camel-jackson/pom.xml | 5 ++++ .../converter/JacksonTypeConverters.java | 14 ++++++++- .../jackson/JacksonConversionsSimpleTest.java | 31 +++++++++++++++++--- 3 files changed, 45 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/15cdf38f/components/camel-jackson/pom.xml ---------------------------------------------------------------------- diff --git a/components/camel-jackson/pom.xml b/components/camel-jackson/pom.xml index a5eb9a8..8c7445e 100644 --- a/components/camel-jackson/pom.xml +++ b/components/camel-jackson/pom.xml @@ -70,6 +70,11 @@ <artifactId>junit</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-core</artifactId> + <scope>test</scope> + </dependency> </dependencies> </project> http://git-wip-us.apache.org/repos/asf/camel/blob/15cdf38f/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/converter/JacksonTypeConverters.java ---------------------------------------------------------------------- diff --git a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/converter/JacksonTypeConverters.java b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/converter/JacksonTypeConverters.java index 123cb2d..345c9b8 100644 --- a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/converter/JacksonTypeConverters.java +++ b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/converter/JacksonTypeConverters.java @@ -17,14 +17,18 @@ package org.apache.camel.component.jackson.converter; import java.util.Map; +import java.util.Set; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.camel.Exchange; import org.apache.camel.FallbackConverter; +import org.apache.camel.spi.Registry; import org.apache.camel.spi.TypeConverterRegistry; public final class JacksonTypeConverters { + private static final ObjectMapper DEFAULT_MAPPER = new ObjectMapper(); + private JacksonTypeConverters() { } @@ -35,7 +39,7 @@ public final class JacksonTypeConverters { } if (value instanceof Map) { - ObjectMapper mapper = new ObjectMapper(); + ObjectMapper mapper = resolveObjectMapper(exchange.getContext().getRegistry()); if (mapper.canSerialize(type)) { return mapper.convertValue(value, type); } @@ -53,4 +57,12 @@ public final class JacksonTypeConverters { return isString || isNumber; } + private static ObjectMapper resolveObjectMapper(Registry registry) { + Set<ObjectMapper> mappers = registry.findByType(ObjectMapper.class); + if (mappers.size() == 1) { + return mappers.iterator().next(); + } + return DEFAULT_MAPPER; + } + } http://git-wip-us.apache.org/repos/asf/camel/blob/15cdf38f/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonConversionsSimpleTest.java ---------------------------------------------------------------------- diff --git a/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonConversionsSimpleTest.java b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonConversionsSimpleTest.java index 868ebab..53e0fb6 100644 --- a/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonConversionsSimpleTest.java +++ b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonConversionsSimpleTest.java @@ -18,29 +18,52 @@ package org.apache.camel.component.jackson; import java.util.HashMap; -import org.apache.camel.component.jackson.converter.JacksonTypeConverters; +import static java.util.Collections.singleton; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.camel.Exchange; import org.junit.Assert; import org.junit.Test; +import static org.apache.camel.component.jackson.converter.JacksonTypeConverters.convertTo; +import static org.mockito.BDDMockito.given; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.RETURNS_DEEP_STUBS; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + public class JacksonConversionsSimpleTest extends Assert { @Test public void shouldNotConvertMapToString() { - Object convertedObject = JacksonTypeConverters.convertTo(String.class, null, new HashMap<String, String>(), null); + Object convertedObject = convertTo(String.class, null, new HashMap<String, String>(), null); assertNull(convertedObject); } @Test public void shouldNotConvertMapToNumber() { - Object convertedObject = JacksonTypeConverters.convertTo(Long.class, null, new HashMap<String, String>(), null); + Object convertedObject = convertTo(Long.class, null, new HashMap<String, String>(), null); assertNull(convertedObject); } @Test public void shouldNotConvertMapToPrimitive() { - Object convertedObject = JacksonTypeConverters.convertTo(long.class, null, new HashMap<String, String>(), null); + Object convertedObject = convertTo(long.class, null, new HashMap<String, String>(), null); assertNull(convertedObject); } + @Test + public void shouldResolveMapperFromRegistry() { + // Given + Exchange exchange = mock(Exchange.class, RETURNS_DEEP_STUBS); + ObjectMapper mapper = mock(ObjectMapper.class); + given(exchange.getContext().getRegistry().findByType(eq(ObjectMapper.class))).willReturn(singleton(mapper)); + + // When + convertTo(TestPojo.class, exchange, new HashMap<String, String>(), null); + + // Then + verify(mapper).canSerialize(TestPojo.class); + } }