Repository: camel Updated Branches: refs/heads/camel-2.16.x f35018183 -> 366493489 refs/heads/master 757962c54 -> 223609d27
[CAMEL-9235] No type converter available when destination is super typ Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/223609d2 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/223609d2 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/223609d2 Branch: refs/heads/master Commit: 223609d27555a0a2ee9a06f51101e44b40c1b2ed Parents: 757962c Author: Thomas Diesler <thomas.dies...@jboss.com> Authored: Mon Oct 19 12:48:59 2015 +0200 Committer: Thomas Diesler <thomas.dies...@jboss.com> Committed: Mon Oct 19 12:51:50 2015 +0200 ---------------------------------------------------------------------- .../converter/dozer/DozerTypeConverter.java | 14 +++++++++-- .../converter/dozer/DozerBeanMappingTest.java | 26 ++++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/223609d2/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverter.java ---------------------------------------------------------------------- diff --git a/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverter.java b/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverter.java index 0505a64..e1576f8 100644 --- a/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverter.java +++ b/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverter.java @@ -70,8 +70,7 @@ public class DozerTypeConverter extends TypeConverterSupport { String mapId = null; if (value != null) { Class<?> sourceType = value.getClass(); - Class<?> destType = type; - ClassMappingMetadata metadata = mapper.getMappingMetadata().getClassMapping(sourceType, destType); + ClassMappingMetadata metadata = getClassMappingMetadata(sourceType, type); if (metadata != null) { mapId = metadata.getMapId(); } @@ -88,4 +87,15 @@ public class DozerTypeConverter extends TypeConverterSupport { return result; } + + private ClassMappingMetadata getClassMappingMetadata(Class<?> sourceType, Class<?> destType) { + ClassMappingMetadata result = null; + for (ClassMappingMetadata aux : mapper.getMappingMetadata().getClassMappingsBySource(sourceType)) { + if (destType.isAssignableFrom(aux.getDestinationClass())) { + result = aux; + break; + } + } + return result; + } } http://git-wip-us.apache.org/repos/asf/camel/blob/223609d2/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerBeanMappingTest.java ---------------------------------------------------------------------- diff --git a/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerBeanMappingTest.java b/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerBeanMappingTest.java index f714418..a21a158 100644 --- a/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerBeanMappingTest.java +++ b/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerBeanMappingTest.java @@ -59,6 +59,32 @@ public class DozerBeanMappingTest { } @Test + public void testMarshalToInterfaceViaDozer() throws Exception { + + CamelContext context = new DefaultCamelContext(); + context.addRoutes(new RouteBuilder() { + @Override + public void configure() throws Exception { + from("direct:start").convertBodyTo(Map.class); + } + }); + + DozerBeanMapperConfiguration mconfig = new DozerBeanMapperConfiguration(); + mconfig.setMappingFiles(Arrays.asList("bean-to-map-dozer-mappings.xml")); + new DozerTypeConverterLoader(context, mconfig); + + context.start(); + try { + ProducerTemplate producer = context.createProducerTemplate(); + Map<?, ?> result = producer.requestBody("direct:start", new Customer("John", "Doe", null), Map.class); + Assert.assertEquals("John", result.get("firstName")); + Assert.assertEquals("Doe", result.get("lastName")); + } finally { + context.stop(); + } + } + + @Test public void testBeanMapping() throws Exception { CamelContext context = new DefaultCamelContext();