You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2015/10/19 13:18:59 UTC

[2/2] camel git commit: [CAMEL-9235] No type converter available when destination is super typ

[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/36649348
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/36649348
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/36649348

Branch: refs/heads/camel-2.16.x
Commit: 366493489b8e932de8c7a7a78b1194bf53d9dd03
Parents: f350181
Author: Thomas Diesler <th...@jboss.com>
Authored: Mon Oct 19 12:48:59 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Mon Oct 19 13:21:21 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/36649348/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/36649348/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();