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();

Reply via email to