You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2017/08/09 05:57:37 UTC

camel git commit: CAMEL-11652 - Upgraded dozer to 6.1

Repository: camel
Updated Branches:
  refs/heads/master a3d0df31d -> b1f8b6f91


CAMEL-11652 - Upgraded dozer to 6.1


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/b1f8b6f9
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/b1f8b6f9
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/b1f8b6f9

Branch: refs/heads/master
Commit: b1f8b6f91b1d2835194454cdf813acd68feb1809
Parents: a3d0df3
Author: Gareth Healy <ga...@gmail.com>
Authored: Tue Aug 8 18:29:33 2017 +0100
Committer: Andrea Cosentino <an...@gmail.com>
Committed: Wed Aug 9 07:56:58 2017 +0200

----------------------------------------------------------------------
 .../src/main/docs/dozer-component.adoc          |  18 +-
 .../camel/component/dozer/DozerComponent.java   |  27 +--
 .../camel/component/dozer/DozerEndpoint.java    | 103 ++++------
 .../dozer/DozerBeanMapperConfiguration.java     |  12 ++
 .../converter/dozer/DozerTypeConverter.java     |   7 +-
 .../dozer/DozerTypeConverterLoader.java         | 171 ++++------------
 .../camel/converter/dozer/MapperFactory.java    | 203 +++++++++++++++++++
 .../dozer/DozerTestArtifactsFactory.java        |  21 +-
 .../dozer/DozerTypeConverterDTOTest.java        |  16 +-
 .../converter/dozer/DozerTypeConverterTest.java |  10 +-
 .../resources/application-context-map-id.xml    |  12 +-
 .../src/test/resources/application-context.xml  |  22 +-
 .../resources/bean-to-bean-dozer-mappings.xml   |   5 +-
 .../resources/bean-to-map-dozer-mappings.xml    |   5 +-
 .../src/test/resources/mapping-map-id.xml       |   8 +-
 .../camel-dozer/src/test/resources/mapping.xml  |   8 +-
 .../camel/component/dozer/customMapping.xml     |   5 +-
 .../camel/component/dozer/dozerBeanMapping.xml  |   5 +-
 .../camel/component/dozer/expressionMapping.xml |   5 +-
 .../dozer/expressionMappingClasspath.xml        |   5 +-
 .../component/dozer/expressionMappingFile.xml   |   5 +-
 .../camel/component/dozer/variableMapping.xml   |   5 +-
 parent/pom.xml                                  |   2 +-
 .../features/src/main/resources/features.xml    |   1 +
 24 files changed, 398 insertions(+), 283 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/b1f8b6f9/components/camel-dozer/src/main/docs/dozer-component.adoc
----------------------------------------------------------------------
diff --git a/components/camel-dozer/src/main/docs/dozer-component.adoc b/components/camel-dozer/src/main/docs/dozer-component.adoc
index e46f818..0b7f879 100644
--- a/components/camel-dozer/src/main/docs/dozer-component.adoc
+++ b/components/camel-dozer/src/main/docs/dozer-component.adoc
@@ -164,9 +164,9 @@ class into your target field of choice:
 
 [source,xml]
 --------------------------------------------------------------------------------------------------------
-<mappings xmlns="http://dozer.sourceforge.net" 
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://dozer.sourceforge.net http://dozer.sourceforge.net/schema/beanmapping.xsd">
+<mappings xmlns="http://dozermapper.github.io/schema/bean-mapping"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping http://dozermapper.github.io/schema/bean-mapping.xsd">
   <configuration>
     <variables>
       <variable name="CUST_ID">ACME-SALES</variable>
@@ -219,9 +219,9 @@ public class CustomMapper {
 
 [source,xml]
 --------------------------------------------------------------------------------------------------------
-<mappings xmlns="http://dozer.sourceforge.net" 
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://dozer.sourceforge.net http://dozer.sourceforge.net/schema/beanmapping.xsd">
+<mappings xmlns="http://dozermapper.github.io/schema/bean-mapping"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping http://dozermapper.github.io/schema/bean-mapping.xsd">
   <mapping>
     <class-a>org.example.A</class-a>
     <class-b>org.example.B</class-b>
@@ -254,9 +254,9 @@ An example of mapping a message header into a target field:
 
 [source,xml]
 --------------------------------------------------------------------------------------------------------------
-<mappings xmlns="http://dozer.sourceforge.net" 
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://dozer.sourceforge.net http://dozer.sourceforge.net/schema/beanmapping.xsd">
+<mappings xmlns="http://dozermapper.github.io/schema/bean-mapping"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping http://dozermapper.github.io/schema/bean-mapping.xsd">
   <mapping>
     <class-a>org.apache.camel.component.dozer.ExpressionMapper</class-a>
     <class-b>org.example.B</class-b>

http://git-wip-us.apache.org/repos/asf/camel/blob/b1f8b6f9/components/camel-dozer/src/main/java/org/apache/camel/component/dozer/DozerComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-dozer/src/main/java/org/apache/camel/component/dozer/DozerComponent.java b/components/camel-dozer/src/main/java/org/apache/camel/component/dozer/DozerComponent.java
index f401798..0d42752 100644
--- a/components/camel-dozer/src/main/java/org/apache/camel/component/dozer/DozerComponent.java
+++ b/components/camel-dozer/src/main/java/org/apache/camel/component/dozer/DozerComponent.java
@@ -16,18 +16,12 @@
  */
 package org.apache.camel.component.dozer;
 
-import java.lang.reflect.Field;
-import java.util.List;
 import java.util.Map;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.converter.dozer.DozerBeanMapperConfiguration;
-import org.apache.camel.converter.dozer.DozerThreadContextClassLoader;
 import org.apache.camel.impl.UriEndpointComponent;
-import org.apache.camel.util.ReflectionHelper;
-import org.dozer.DozerBeanMapper;
-import org.dozer.config.GlobalSettings;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -48,31 +42,14 @@ public class DozerComponent extends UriEndpointComponent {
         config.setName(remaining);
         config.setMappingConfiguration(getAndRemoveOrResolveReferenceParameter(
                 parameters, "mappingConfiguration", DozerBeanMapperConfiguration.class));
+
         setProperties(config, parameters);
 
         // Validate endpoint parameters
         if (config.getTargetModel() == null) {
             throw new IllegalArgumentException("The targetModel parameter is required for dozer endpoints");
         }
-        return new DozerEndpoint(uri, this, config);
-    }
 
-    public static DozerBeanMapper createDozerBeanMapper(List<String> mappingFiles) {
-        GlobalSettings settings = GlobalSettings.getInstance();
-        try {
-            LOG.info("Configuring GlobalSettings to use Camel classloader: {}", DozerThreadContextClassLoader.class.getName());
-            Field field = settings.getClass().getDeclaredField("classLoaderBeanName");
-            ReflectionHelper.setField(field, settings, DozerThreadContextClassLoader.class.getName());
-        } catch (Exception e) {
-            throw new IllegalStateException("Cannot configure Dozer GlobalSettings to use DozerThreadContextClassLoader as classloader due " + e.getMessage(), e);
-        }
-        try {
-            LOG.info("Configuring GlobalSettings to enable EL");
-            Field field = settings.getClass().getDeclaredField("elEnabled");
-            ReflectionHelper.setField(field, settings, true);
-        } catch (NoSuchFieldException nsfEx) {
-            throw new IllegalStateException("Failed to enable EL in global Dozer settings", nsfEx);
-        }
-        return new DozerBeanMapper(mappingFiles);
+        return new DozerEndpoint(uri, this, config);
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/b1f8b6f9/components/camel-dozer/src/main/java/org/apache/camel/component/dozer/DozerEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-dozer/src/main/java/org/apache/camel/component/dozer/DozerEndpoint.java b/components/camel-dozer/src/main/java/org/apache/camel/component/dozer/DozerEndpoint.java
index e008881..23b35ff 100644
--- a/components/camel-dozer/src/main/java/org/apache/camel/component/dozer/DozerEndpoint.java
+++ b/components/camel-dozer/src/main/java/org/apache/camel/component/dozer/DozerEndpoint.java
@@ -16,8 +16,8 @@
  */
 package org.apache.camel.component.dozer;
 
-import java.io.InputStream;
-import java.util.Collections;
+import java.net.URL;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -27,17 +27,16 @@ import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
-import org.apache.camel.converter.dozer.DozerTypeConverterLoader;
+import org.apache.camel.converter.dozer.DozerBeanMapperConfiguration;
+import org.apache.camel.converter.dozer.MapperFactory;
 import org.apache.camel.impl.DefaultEndpoint;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
-import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.ResourceHelper;
 import org.dozer.CustomConverter;
-import org.dozer.DozerBeanMapper;
+import org.dozer.Mapper;
 import org.dozer.config.BeanContainer;
 import org.dozer.loader.xml.ELEngine;
-import org.dozer.loader.xml.ElementReader;
 import org.dozer.loader.xml.ExpressionElementReader;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -54,7 +53,7 @@ public class DozerEndpoint extends DefaultEndpoint {
     private static final String VARIABLE_MAPPING_ID = "_variableMapping";
     private static final String EXPRESSION_MAPPING_ID = "_expressionMapping";
 
-    private DozerBeanMapper mapper;
+    private Mapper mapper;
     private VariableMapper variableMapper;
     private CustomMapper customMapper;
     private ExpressionMapper expressionMapper;
@@ -85,7 +84,7 @@ public class DozerEndpoint extends DefaultEndpoint {
         return true;
     }
 
-    public DozerBeanMapper getMapper() throws Exception {
+    public Mapper getMapper() throws Exception {
         return mapper;
     }
 
@@ -123,76 +122,42 @@ public class DozerEndpoint extends DefaultEndpoint {
     }
 
     protected void initDozerBeanContainerAndMapper() throws Exception {
+        LOG.info("Configuring {}...", Mapper.class.getName());
 
-        LOG.info("Configuring DozerBeanContainer and DozerBeanMapper");
-
-
-        // init the expression engine with a fallback to the impl from glasfish
-        initELEngine();
-
-        // configure mapper as well
         if (mapper == null) {
-            if (configuration.getMappingConfiguration() != null) {
-                mapper = DozerTypeConverterLoader.createDozerBeanMapper(
-                        configuration.getMappingConfiguration());
-            } else {
-                mapper = createDozerBeanMapper();
-            }
-            configureMapper(mapper);
-        }
+            if (configuration.getMappingConfiguration() == null) {
+                URL url = ResourceHelper.resolveMandatoryResourceAsUrl(getCamelContext().getClassResolver(), configuration.getMappingFile());
 
-    }
+                DozerBeanMapperConfiguration config = new DozerBeanMapperConfiguration();
+                config.setCustomConvertersWithId(getCustomConvertersWithId());
+                config.setMappingFiles(Arrays.asList(url.toString()));
 
-    public void initELEngine() {
-        String elprop = System.getProperty("javax.el.ExpressionFactory");
-        ClassLoader tccl = Thread.currentThread().getContextClassLoader();
-        try {
-            ClassLoader appcl = getCamelContext().getApplicationContextClassLoader();
-            ClassLoader auxcl = appcl != null ? appcl : DozerEndpoint.class.getClassLoader();
-            Thread.currentThread().setContextClassLoader(auxcl);
-            try {
-                Class<?> clazz = auxcl.loadClass("com.sun.el.ExpressionFactoryImpl");
-                ExpressionFactory factory = (ExpressionFactory) clazz.newInstance();
-                System.setProperty("javax.el.ExpressionFactory", factory.getClass().getName());
-            } catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
-                LOG.debug("Cannot load glasfish expression engine, using default");
-            }
-            ELEngine engine = new ELEngine();
-            engine.init();
-            BeanContainer.getInstance().setElEngine(engine);
-            ElementReader reader = new ExpressionElementReader(engine);
-            BeanContainer.getInstance().setElementReader(reader);
-        } finally {
-            Thread.currentThread().setContextClassLoader(tccl);
-            if (elprop != null) {
-                System.setProperty("javax.el.ExpressionFactory", elprop);
+                configuration.setMappingConfiguration(config);
             } else {
-                System.clearProperty("javax.el.ExpressionFactory");
+                DozerBeanMapperConfiguration config = configuration.getMappingConfiguration();
+                if (config.getCustomConvertersWithId() == null) {
+                    config.setCustomConvertersWithId(getCustomConvertersWithId());
+                } else {
+                    config.getCustomConvertersWithId().putAll(getCustomConvertersWithId());
+                }
+
+                if (config.getMappingFiles() == null || config.getMappingFiles().size() <= 0) {
+                    URL url = ResourceHelper.resolveMandatoryResourceAsUrl(getCamelContext().getClassResolver(), configuration.getMappingFile());
+                    config.setMappingFiles(Arrays.asList(url.toString()));
+                }
             }
-        }
-    }
 
-    private DozerBeanMapper createDozerBeanMapper() throws Exception {
-        DozerBeanMapper answer = DozerComponent.createDozerBeanMapper(Collections.<String>emptyList());
-        InputStream mapStream = null;
-        try {
-            LOG.info("Loading Dozer mapping file {}.", configuration.getMappingFile());
-            // create the mapper instance and add the mapping file
-            mapStream = ResourceHelper.resolveMandatoryResourceAsInputStream(getCamelContext(), configuration.getMappingFile());
-            answer.addMapping(mapStream);
-        } finally {
-            IOHelper.close(mapStream);
+            MapperFactory factory = new MapperFactory(getCamelContext(), configuration.getMappingConfiguration());
+            mapper = factory.create();
         }
-        return answer;
     }
 
-    private void configureMapper(DozerBeanMapper mapper) throws Exception {
-        // add our built-in converters
-        Map<String, CustomConverter> converters = new HashMap<String, CustomConverter>();
-        converters.put(CUSTOM_MAPPING_ID, customMapper);
-        converters.put(VARIABLE_MAPPING_ID, variableMapper);
-        converters.put(EXPRESSION_MAPPING_ID, expressionMapper);
-        converters.putAll(mapper.getCustomConvertersWithId());
-        mapper.setCustomConvertersWithId(converters);
+    private Map<String, CustomConverter> getCustomConvertersWithId() {
+        Map<String, CustomConverter> customConvertersWithId = new HashMap<String, CustomConverter>();
+        customConvertersWithId.put(CUSTOM_MAPPING_ID, customMapper);
+        customConvertersWithId.put(VARIABLE_MAPPING_ID, variableMapper);
+        customConvertersWithId.put(EXPRESSION_MAPPING_ID, expressionMapper);
+
+        return customConvertersWithId;
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/b1f8b6f9/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerBeanMapperConfiguration.java
----------------------------------------------------------------------
diff --git a/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerBeanMapperConfiguration.java b/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerBeanMapperConfiguration.java
index 6257547..e29ca58 100644
--- a/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerBeanMapperConfiguration.java
+++ b/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerBeanMapperConfiguration.java
@@ -19,9 +19,12 @@ package org.apache.camel.converter.dozer;
 import java.util.List;
 import java.util.Map;
 
+import com.sun.org.apache.xpath.internal.operations.Bool;
+
 import org.dozer.CustomConverter;
 import org.dozer.CustomFieldMapper;
 import org.dozer.DozerEventListener;
+import org.dozer.loader.api.BeanMappingBuilder;
 
 public class DozerBeanMapperConfiguration {
 
@@ -30,6 +33,7 @@ public class DozerBeanMapperConfiguration {
     private List<DozerEventListener> eventListeners;
     private Map<String, CustomConverter> customConvertersWithId;
     private CustomFieldMapper customFieldMapper;
+    private List<BeanMappingBuilder> beanMappingBuilders;
 
     public List<String> getMappingFiles() {
         return mappingFiles;
@@ -70,4 +74,12 @@ public class DozerBeanMapperConfiguration {
     public void setCustomFieldMapper(CustomFieldMapper customFieldMapper) {
         this.customFieldMapper = customFieldMapper;
     }
+
+    public List<BeanMappingBuilder> getBeanMappingBuilders() {
+        return beanMappingBuilders;
+    }
+
+    public void setBeanMappingBuilders(List<BeanMappingBuilder> beanMappingBuilders) {
+        this.beanMappingBuilders = beanMappingBuilders;
+    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/b1f8b6f9/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 fffdb62..19e5e20 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
@@ -21,7 +21,6 @@ import org.apache.camel.Exchange;
 import org.apache.camel.TypeConversionException;
 import org.apache.camel.TypeConverter;
 import org.apache.camel.support.TypeConverterSupport;
-import org.dozer.DozerBeanMapper;
 import org.dozer.Mapper;
 import org.dozer.metadata.ClassMappingMetadata;
 import org.slf4j.Logger;
@@ -41,13 +40,13 @@ public class DozerTypeConverter extends TypeConverterSupport {
 
     private static final Logger LOG = LoggerFactory.getLogger(DozerTypeConverter.class);
 
-    private final DozerBeanMapper mapper;
+    private final Mapper mapper;
 
-    public DozerTypeConverter(DozerBeanMapper mapper) {
+    public DozerTypeConverter(Mapper mapper) {
         this.mapper = mapper;
     }
 
-    public DozerBeanMapper getMapper() {
+    public Mapper getMapper() {
         return mapper;
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/b1f8b6f9/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverterLoader.java
----------------------------------------------------------------------
diff --git a/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverterLoader.java b/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverterLoader.java
index f9396a9..b967a68 100644
--- a/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverterLoader.java
+++ b/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverterLoader.java
@@ -18,8 +18,6 @@ package org.apache.camel.converter.dozer;
 
 import java.net.MalformedURLException;
 import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -27,19 +25,14 @@ import java.util.Map;
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.TypeConverter;
-import org.apache.camel.component.dozer.DozerComponent;
 import org.apache.camel.spi.ClassResolver;
 import org.apache.camel.spi.TypeConverterRegistry;
 import org.apache.camel.support.ServiceSupport;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.ResourceHelper;
-import org.dozer.DozerBeanMapper;
 import org.dozer.Mapper;
-import org.dozer.classmap.ClassMap;
-import org.dozer.classmap.MappingFileData;
-import org.dozer.loader.api.BeanMappingBuilder;
-import org.dozer.loader.xml.MappingFileReader;
-import org.dozer.loader.xml.XMLParserFactory;
+import org.dozer.metadata.ClassMappingMetadata;
+import org.dozer.metadata.MappingMetadata;
 import org.dozer.util.DozerClassLoader;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -62,7 +55,7 @@ public class DozerTypeConverterLoader extends ServiceSupport implements CamelCon
     private final Logger log = LoggerFactory.getLogger(getClass());
     private CamelContext camelContext;
     private transient DozerBeanMapperConfiguration configuration;
-    private transient DozerBeanMapper mapper;
+    private transient Mapper mapper;
 
     /**
      * Creates a <code>DozerTypeConverter</code> performing no
@@ -73,7 +66,7 @@ public class DozerTypeConverterLoader extends ServiceSupport implements CamelCon
 
     /**
      * Creates a <code>DozerTypeConverter</code> that will search the given
-     * {@link CamelContext} for instances of {@link DozerBeanMapper}. Each
+     * {@link CamelContext} for instances of {@link Mapper}. Each
      * discovered instance will be wrapped as a {@link DozerTypeConverter} and
      * register as a {@link TypeConverter} with the context
      *
@@ -106,7 +99,8 @@ public class DozerTypeConverterLoader extends ServiceSupport implements CamelCon
                 Thread.currentThread().setContextClassLoader(appcl);
             }
             log.info("Using DozerBeanMapperConfiguration: {}", configuration);
-            DozerBeanMapper mapper = createDozerBeanMapper(configuration);
+            MapperFactory factory = new MapperFactory(camelContext, configuration);
+            Mapper mapper = factory.create();
 
             this.camelContext = camelContext;
             this.mapper = mapper;
@@ -121,27 +115,6 @@ public class DozerTypeConverterLoader extends ServiceSupport implements CamelCon
     }
 
     /**
-     * Creates a <code>DozerTypeConverter</code> that will wrap the the given
-     * {@link DozerBeanMapper} as a {@link DozerTypeConverter} and register it
-     * with the given context. It will also search the context for
-     *
-     * @param camelContext the context to register the
-     *                     {@link DozerTypeConverter} in
-     * @param mapper       the DozerMapperBean to be wrapped as a type converter.
-     */
-    @Deprecated
-    public DozerTypeConverterLoader(CamelContext camelContext, DozerBeanMapper mapper) {
-        this.camelContext = camelContext;
-        this.mapper = mapper;
-
-        try {
-            camelContext.addService(this);
-        } catch (Exception e) {
-            throw ObjectHelper.wrapRuntimeCamelException(e);
-        }
-    }
-
-    /**
      * Doses the actual querying and registration of {@link DozerTypeConverter}s
      * with the {@link CamelContext}.
      *
@@ -149,7 +122,7 @@ public class DozerTypeConverterLoader extends ServiceSupport implements CamelCon
      *                     {@link DozerTypeConverter} in
      * @param mapper       the DozerMapperBean to be wrapped as a type converter.
      */
-    public void init(CamelContext camelContext, DozerBeanMapper mapper) {
+    public void init(CamelContext camelContext, Mapper mapper) {
         this.camelContext = camelContext;
         if (mapper != null) {
             this.mapper = mapper;
@@ -162,7 +135,7 @@ public class DozerTypeConverterLoader extends ServiceSupport implements CamelCon
                 Thread.currentThread().setContextClassLoader(appcl);
             }
 
-            Map<String, DozerBeanMapper> mappers = lookupDozerBeanMappers();
+            Map<String, Mapper> mappers = lookupDozerBeanMappers();
             // only add if we do not already have it
             if (mapper != null && !mappers.containsValue(mapper)) {
                 mappers.put("parameter", mapper);
@@ -185,13 +158,12 @@ public class DozerTypeConverterLoader extends ServiceSupport implements CamelCon
             }
 
             if (configurations != null) {
-                if (configurations.size() > 1) {
-                    log.warn("Loaded " + configurations.size() + " Dozer configurations from Camel registry."
-                            + " Dozer is most efficient when there is a single mapper instance. Consider amalgamating instances.");
-                }
                 for (Map.Entry<String, DozerBeanMapperConfiguration> entry : configurations.entrySet()) {
                     String id = entry.getKey();
-                    DozerBeanMapper beanMapper = createDozerBeanMapper(entry.getValue());
+
+                    MapperFactory factory = new MapperFactory(getCamelContext(), entry.getValue());
+                    Mapper beanMapper = factory.create();
+
                     // only add if we do not already have it
                     if (!mappers.containsValue(beanMapper)) {
                         mappers.put(id, beanMapper);
@@ -199,20 +171,20 @@ public class DozerTypeConverterLoader extends ServiceSupport implements CamelCon
                 }
             }
 
-            if (mappers.size() > 1) {
-                log.warn("Loaded " + mappers.size() + " Dozer mappers from Camel registry."
-                        + " Dozer is most efficient when there is a single mapper instance. Consider amalgamating instances.");
-            } else if (mappers.size() == 0) {
-                log.warn("No Dozer mappers found in Camel registry. You should add Dozer mappers as beans to the registry of the type: "
-                        + DozerBeanMapper.class.getName());
-            }
+            log.info("Loaded {} Dozer mappers from Camel registry.", mappers.size());
 
+            if (mappers.size() == 0) {
+                log.warn("No Dozer mappers found in Camel registry. You should add Dozer mappers as beans to the registry of the type: {}", Mapper.class.getName());
+            }
 
             TypeConverterRegistry registry = camelContext.getTypeConverterRegistry();
-            for (Map.Entry<String, DozerBeanMapper> entry : mappers.entrySet()) {
+            for (Map.Entry<String, Mapper> entry : mappers.entrySet()) {
                 String mapperId = entry.getKey();
-                DozerBeanMapper dozer = entry.getValue();
-                List<ClassMap> all = loadMappings(camelContext, mapperId, dozer);
+                Mapper dozer = entry.getValue();
+
+                MappingMetadata meta = dozer.getMappingMetadata();
+
+                List<ClassMappingMetadata> all = meta.getClassMappings();
                 registerClassMaps(registry, mapperId, dozer, all);
             }
 
@@ -222,38 +194,10 @@ public class DozerTypeConverterLoader extends ServiceSupport implements CamelCon
     }
 
     /**
-     * Creates a {@link DozerBeanMapper} from the given configuration.
-     *
-     * @param configuration  the dozer bean mapper configuration.
-     * @return the created mapper
+     * Lookup the dozer {@link Mapper} to be used.
      */
-    public static DozerBeanMapper createDozerBeanMapper(DozerBeanMapperConfiguration configuration) {
-        DozerBeanMapper mapper;
-        if (configuration.getMappingFiles() != null) {
-            mapper = DozerComponent.createDozerBeanMapper(configuration.getMappingFiles());
-        } else {
-            mapper = DozerComponent.createDozerBeanMapper(Collections.<String>emptyList());
-        }
-        if (configuration.getCustomConverters() != null) {
-            mapper.setCustomConverters(configuration.getCustomConverters());
-        }
-        if (configuration.getEventListeners() != null) {
-            mapper.setEventListeners(configuration.getEventListeners());
-        }
-        if (configuration.getCustomConvertersWithId() != null) {
-            mapper.setCustomConvertersWithId(configuration.getCustomConvertersWithId());
-        }
-        if (configuration.getCustomFieldMapper() != null) {
-            mapper.setCustomFieldMapper(configuration.getCustomFieldMapper());
-        }
-        return mapper;
-    }
-
-    /**
-     * Lookup the dozer {@link DozerBeanMapper} to be used.
-     */
-    protected Map<String, DozerBeanMapper> lookupDozerBeanMappers() {
-        return new HashMap<String, DozerBeanMapper>(camelContext.getRegistry().findByTypeWithName(DozerBeanMapper.class));
+    protected Map<String, Mapper> lookupDozerBeanMappers() {
+        return new HashMap<String, Mapper>(camelContext.getRegistry().findByTypeWithName(Mapper.class));
     }
 
     /**
@@ -263,13 +207,14 @@ public class DozerTypeConverterLoader extends ServiceSupport implements CamelCon
         return new HashMap<String, DozerBeanMapperConfiguration>(camelContext.getRegistry().findByTypeWithName(DozerBeanMapperConfiguration.class));
     }
 
-    protected void registerClassMaps(TypeConverterRegistry registry, String dozerId, DozerBeanMapper dozer, List<ClassMap> all) {
+    protected void registerClassMaps(TypeConverterRegistry registry, String dozerId, Mapper dozer, List<ClassMappingMetadata> all) {
         DozerTypeConverter converter = new DozerTypeConverter(dozer);
-        for (ClassMap map : all) {
-            addDozerTypeConverter(registry, converter, dozerId, map.getSrcClassToMap(), map.getDestClassToMap());
+        for (ClassMappingMetadata map : all) {
+            addDozerTypeConverter(registry, converter, dozerId, map.getSourceClass(), map.getDestinationClass());
+
             // if not one way then add the other way around also
-            if (map.getType() != ONE_WAY) {
-                addDozerTypeConverter(registry, converter, dozerId, map.getDestClassToMap(), map.getSrcClassToMap());
+            if (map.getMappingDirection() != ONE_WAY) {
+                addDozerTypeConverter(registry, converter, dozerId, map.getDestinationClass(), map.getSourceClass());
             }
         }
     }
@@ -278,55 +223,13 @@ public class DozerTypeConverterLoader extends ServiceSupport implements CamelCon
                                          String dozerId, Class<?> to, Class<?> from) {
         if (log.isInfoEnabled()) {
             if (dozerId != null) {
-                log.info("Added Dozer: {} as Camel type converter: {} -> {}", new Object[]{dozerId, from, to});
+                log.info("Added Dozer: {} as Camel type converter: {} -> {}", new Object[] {dozerId, from, to});
             } else {
-                log.info("Added Dozer as Camel type converter: {} -> {}", new Object[]{from, to});
+                log.info("Added Dozer as Camel type converter: {} -> {}", new Object[] {from, to});
             }
         }
-        registry.addTypeConverter(from, to, converter);
-    }
-
-    private List<ClassMap> loadMappings(CamelContext camelContext, String mapperId, DozerBeanMapper mapper) {
-        List<ClassMap> answer = new ArrayList<ClassMap>();
 
-        // load the class map using the class resolver so we can load from classpath in OSGi
-        MappingFileReader reader = new MappingFileReader(XMLParserFactory.getInstance());
-        List<String> mappingFiles = mapper.getMappingFiles();
-        if (mappingFiles == null) {
-            return Collections.emptyList();
-        }
-
-        for (String name : mappingFiles) {
-            URL url = loadMappingFile(camelContext.getClassResolver(), name);
-            if (url != null) {
-                MappingFileData data = reader.read(url);
-                answer.addAll(data.getClassMaps());
-            }
-        }
-
-        return answer;
-    }
-
-    /**
-     * Registers Dozer <code>BeanMappingBuilder</code> in current mapper instance.
-     * This method should be called instead of direct <code>mapper.addMapping()</code> invocation for Camel
-     * being able to register given type conversion.
-     *
-     * @param beanMappingBuilder api-based mapping builder
-     */
-    public void addMapping(BeanMappingBuilder beanMappingBuilder) {
-        if (mapper == null) {
-            log.warn("No mapper instance provided to " + this.getClass().getSimpleName()
-                    + ". Mapping has not been registered!");
-            return;
-        }
-
-        mapper.addMapping(beanMappingBuilder);
-        MappingFileData mappingFileData = beanMappingBuilder.build();
-        TypeConverterRegistry registry = camelContext.getTypeConverterRegistry();
-        List<ClassMap> classMaps = new ArrayList<ClassMap>();
-        classMaps.addAll(mappingFileData.getClassMaps());
-        registerClassMaps(registry, null, mapper, classMaps);
+        registry.addTypeConverter(from, to, converter);
     }
 
     public CamelContext getCamelContext() {
@@ -336,7 +239,7 @@ public class DozerTypeConverterLoader extends ServiceSupport implements CamelCon
     /**
      * Sets the {@link CamelContext} <b>and also</b> initializes this loader.
      * <p/>
-     * The reason why {@link #init(org.apache.camel.CamelContext, org.dozer.DozerBeanMapper)} is also called
+     * The reason why {@link #init(org.apache.camel.CamelContext, org.dozer.Mapper)} is also called
      * is because making using Dozer in Spring XML files easier, as no need to use the init-method attribute.
      *
      * @param camelContext the CamelContext
@@ -352,11 +255,11 @@ public class DozerTypeConverterLoader extends ServiceSupport implements CamelCon
         }
     }
 
-    public DozerBeanMapper getMapper() {
+    public Mapper getMapper() {
         return mapper;
     }
 
-    public void setMapper(DozerBeanMapper mapper) {
+    public void setMapper(Mapper mapper) {
         this.mapper = mapper;
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/b1f8b6f9/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/MapperFactory.java
----------------------------------------------------------------------
diff --git a/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/MapperFactory.java b/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/MapperFactory.java
new file mode 100644
index 0000000..bc57250
--- /dev/null
+++ b/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/MapperFactory.java
@@ -0,0 +1,203 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.converter.dozer;
+
+import java.lang.reflect.Field;
+import java.util.Map;
+
+import javax.el.ExpressionFactory;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.dozer.DozerEndpoint;
+import org.apache.camel.util.ReflectionHelper;
+import org.dozer.CustomConverter;
+import org.dozer.DozerBeanMapperBuilder;
+import org.dozer.DozerEventListener;
+import org.dozer.Mapper;
+import org.dozer.config.BeanContainer;
+import org.dozer.config.GlobalSettings;
+import org.dozer.loader.api.BeanMappingBuilder;
+import org.dozer.loader.xml.ELEngine;
+import org.dozer.loader.xml.ExpressionElementReader;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MapperFactory {
+
+    private static final Logger LOG = LoggerFactory.getLogger(MapperFactory.class);
+
+    private final CamelContext camelContext;
+    private final DozerBeanMapperConfiguration configuration;
+
+    public MapperFactory(CamelContext camelContext, DozerBeanMapperConfiguration configuration) {
+        this.camelContext = camelContext;
+        this.configuration = configuration;
+    }
+
+    public Mapper create() {
+        if (camelContext == null) {
+            throw new IllegalStateException("CamelContext is null");
+        }
+
+        return parseConfiguration(configuration);
+    }
+
+    private Mapper parseConfiguration(DozerBeanMapperConfiguration configuration) {
+        DozerBeanMapperBuilder builder = DozerBeanMapperBuilder.create();
+        if (configuration != null) {
+            if (configuration.getMappingFiles() != null) {
+                String[] files = configuration.getMappingFiles().toArray(new String[configuration.getMappingFiles().size()]);
+                builder.withMappingFiles(files);
+            }
+
+            if (configuration.getCustomConverters() != null) {
+                for (CustomConverter current : configuration.getCustomConverters()) {
+                    builder.withCustomConverter(current);
+                }
+            }
+            if (configuration.getEventListeners() != null) {
+                for (DozerEventListener current : configuration.getEventListeners()) {
+                    builder.withEventListener(current);
+                }
+            }
+
+            if (configuration.getCustomConvertersWithId() != null) {
+                for (Map.Entry<String, CustomConverter> current : configuration.getCustomConvertersWithId().entrySet()) {
+                    builder.withCustomConverterWithId(current.getKey(), current.getValue());
+                }
+            }
+
+            if (configuration.getBeanMappingBuilders() != null) {
+                for (BeanMappingBuilder current : configuration.getBeanMappingBuilders()) {
+                    builder.withMappingBuilder(current);
+                }
+            }
+
+            if (configuration.getCustomFieldMapper() != null) {
+                builder.withCustomFieldMapper(configuration.getCustomFieldMapper());
+            }
+        }
+
+        Mapper mapper = builder.build();
+
+        configureGlobalSettings(mapper);
+        configureBeanContainer(mapper, configuration);
+
+        mapper.getMappingMetadata();
+
+        return mapper;
+    }
+
+    /**
+     * Sets hidden fields on the mapper and returns an instance
+     * NOTE: https://github.com/DozerMapper/dozer/issues/463
+     *
+     * @param mapper
+     */
+    private void configureGlobalSettings(Mapper mapper) {
+        GlobalSettings settings;
+        try {
+            LOG.info("Attempting to retrieve GlobalSettings from: " + mapper);
+            Field field = mapper.getClass().getDeclaredField("globalSettings");
+            field.setAccessible(true);
+
+            settings = (GlobalSettings)field.get(mapper);
+        } catch (Exception e) {
+            throw new IllegalStateException("Cannot retrieve Dozer GlobalSettings due " + e.getMessage(), e);
+        }
+
+        //Safety check
+        if (settings == null) {
+            throw new IllegalStateException("Cannot retrieve Dozer GlobalSettings due null reflection response");
+        }
+
+        try {
+            LOG.info("Configuring GlobalSettings to use Camel classloader: {}", DozerThreadContextClassLoader.class.getName());
+            Field field = settings.getClass().getDeclaredField("classLoaderBeanName");
+            ReflectionHelper.setField(field, settings, DozerThreadContextClassLoader.class.getName());
+        } catch (Exception e) {
+            throw new IllegalStateException("Cannot configure Dozer GlobalSettings to use DozerThreadContextClassLoader as classloader due " + e.getMessage(), e);
+        }
+
+        try {
+            LOG.info("Configuring GlobalSettings to enable EL");
+            Field field = settings.getClass().getDeclaredField("elEnabled");
+            ReflectionHelper.setField(field, settings, true);
+        } catch (NoSuchFieldException nsfEx) {
+            throw new IllegalStateException("Failed to enable EL in global Dozer settings", nsfEx);
+        }
+    }
+
+    public void configureBeanContainer(Mapper mapper, DozerBeanMapperConfiguration configuration) {
+        String elprop = System.getProperty("javax.el.ExpressionFactory");
+        ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+        try {
+            ClassLoader appcl = camelContext.getApplicationContextClassLoader();
+            ClassLoader auxcl = appcl != null ? appcl : DozerEndpoint.class.getClassLoader();
+            Thread.currentThread().setContextClassLoader(auxcl);
+            try {
+                Class<?> clazz = auxcl.loadClass("com.sun.el.ExpressionFactoryImpl");
+                ExpressionFactory factory = (ExpressionFactory)clazz.newInstance();
+                System.setProperty("javax.el.ExpressionFactory", factory.getClass().getName());
+            } catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
+                LOG.debug("Cannot load glasfish expression engine, using default");
+            }
+
+            BeanContainer beanContainer = resolveBeanContainer(mapper);
+            if (beanContainer.getElEngine() == null) {
+                ELEngine engine = new ELEngine();
+                engine.init();
+
+                beanContainer.setElEngine(engine);
+            }
+
+            beanContainer.setElementReader(new ExpressionElementReader(beanContainer.getElEngine()));
+        } finally {
+            Thread.currentThread().setContextClassLoader(tccl);
+            if (elprop == null) {
+                System.clearProperty("javax.el.ExpressionFactory");
+            } else {
+                System.setProperty("javax.el.ExpressionFactory", elprop);
+            }
+        }
+    }
+
+    private BeanContainer resolveBeanContainer(Mapper mapper) {
+        LOG.info("Attempting to retrieve BeanContainer from: " + mapper);
+
+        BeanContainer beanContainer = (BeanContainer)resolveProperty(mapper, "beanContainer");
+        if (beanContainer == null) {
+            throw new IllegalStateException("Cannot retrieve Dozer BeanContainer due null response");
+        }
+
+        return beanContainer;
+    }
+
+    private static Object resolveProperty(Mapper mapper, String fieldName) {
+        Object prop;
+        try {
+            Field field = mapper.getClass().getDeclaredField(fieldName);
+            field.setAccessible(true);
+
+            prop = field.get(mapper);
+        } catch (Exception e) {
+            throw new IllegalStateException("Cannot retrieve DozerBeanMapper." + fieldName + " due " + e.getMessage(), e);
+        }
+
+        return prop;
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/b1f8b6f9/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerTestArtifactsFactory.java
----------------------------------------------------------------------
diff --git a/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerTestArtifactsFactory.java b/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerTestArtifactsFactory.java
index d0d2959..1147bbb 100644
--- a/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerTestArtifactsFactory.java
+++ b/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerTestArtifactsFactory.java
@@ -18,17 +18,18 @@ package org.apache.camel.converter.dozer;
 
 import java.util.Arrays;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.converter.dozer.dto.AddressDTO;
 import org.apache.camel.converter.dozer.dto.CustomerDTO;
 import org.apache.camel.converter.dozer.model.Address;
 import org.apache.camel.converter.dozer.service.Customer;
-import org.dozer.DozerBeanMapper;
+import org.dozer.Mapper;
 
 public final class DozerTestArtifactsFactory {
-    
+
     private DozerTestArtifactsFactory() {
     }
-    
+
     public static Customer createServiceCustomer() {
         return new Customer("Bob", "Roberts", "12345", "1 main st");
     }
@@ -41,13 +42,17 @@ public final class DozerTestArtifactsFactory {
         return new CustomerDTO("Bob", "Roberts", new AddressDTO("12345", "1 main st"));
     }
 
-    public static DozerBeanMapper createMapper() {
-        return new DozerBeanMapper(Arrays.asList(new String[]{"mapping.xml"}));
-    }
+    public static Mapper createMapper(CamelContext camelContext) {
+        DozerBeanMapperConfiguration config = new DozerBeanMapperConfiguration();
+        config.setMappingFiles(Arrays.asList("mapping.xml"));
 
-    public static DozerBeanMapper createCleanMapper() {
-        return new DozerBeanMapper();
+        MapperFactory factory = new MapperFactory(camelContext, config);
+        return factory.create();
     }
 
+    public static Mapper createCleanMapper(CamelContext camelContext) {
+        MapperFactory factory = new MapperFactory(camelContext, null);
+        return factory.create();
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/b1f8b6f9/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerTypeConverterDTOTest.java
----------------------------------------------------------------------
diff --git a/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerTypeConverterDTOTest.java b/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerTypeConverterDTOTest.java
index 9d7ad3b..6ec7a49 100644
--- a/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerTypeConverterDTOTest.java
+++ b/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerTypeConverterDTOTest.java
@@ -16,16 +16,16 @@
  */
 package org.apache.camel.converter.dozer;
 
+import java.util.Arrays;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.converter.dozer.dto.CustomerDTO;
 import org.apache.camel.converter.dozer.model.Customer;
 import org.apache.camel.test.junit4.CamelTestSupport;
-import org.dozer.DozerBeanMapper;
 import org.dozer.loader.api.BeanMappingBuilder;
 import org.junit.Test;
 
-import static org.apache.camel.converter.dozer.DozerTestArtifactsFactory.createCleanMapper;
 import static org.apache.camel.converter.dozer.DozerTestArtifactsFactory.createDtoCustomer;
 
 public class DozerTypeConverterDTOTest extends CamelTestSupport {
@@ -33,14 +33,18 @@ public class DozerTypeConverterDTOTest extends CamelTestSupport {
     @Override
     public void setUp() throws Exception {
         super.setUp();
-        DozerBeanMapper mapper = createCleanMapper();
-        DozerTypeConverterLoader loader = new DozerTypeConverterLoader(context, mapper);
-        loader.addMapping(new BeanMappingBuilder() {
+
+        BeanMappingBuilder beanMappingBuilder = new BeanMappingBuilder() {
             @Override
             protected void configure() {
                 mapping(CustomerDTO.class, Customer.class);
             }
-        });
+        };
+
+        DozerBeanMapperConfiguration config = new DozerBeanMapperConfiguration();
+        config.setBeanMappingBuilders(Arrays.asList(beanMappingBuilder));
+
+        new DozerTypeConverterLoader(context, config);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/camel/blob/b1f8b6f9/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerTypeConverterTest.java
----------------------------------------------------------------------
diff --git a/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerTypeConverterTest.java b/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerTypeConverterTest.java
index 36958f5..8c97b06 100644
--- a/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerTypeConverterTest.java
+++ b/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerTypeConverterTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.converter.dozer;
 
+import java.util.Arrays;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.converter.dozer.service.Customer;
@@ -31,7 +33,11 @@ public class DozerTypeConverterTest extends CamelTestSupport {
     @Override
     public void setUp() throws Exception {
         super.setUp();
-        new DozerTypeConverterLoader(context, createMapper());
+
+        DozerBeanMapperConfiguration config = new DozerBeanMapperConfiguration();
+        config.setMappingFiles(Arrays.asList("mapping.xml"));
+
+        new DozerTypeConverterLoader(context, config);
     }
 
     @Override
@@ -56,7 +62,7 @@ public class DozerTypeConverterTest extends CamelTestSupport {
 
     @Test
     public void verifyCustomerMapping() throws Exception {
-        Mapper mapper = DozerTestArtifactsFactory.createMapper();
+        Mapper mapper = DozerTestArtifactsFactory.createMapper(context);
         Customer service = createServiceCustomer();
         org.apache.camel.converter.dozer.model.Customer model = mapper.map(service, org.apache.camel.converter.dozer.model.Customer.class);
         Customer roundTrip = mapper.map(model, Customer.class);

http://git-wip-us.apache.org/repos/asf/camel/blob/b1f8b6f9/components/camel-dozer/src/test/resources/application-context-map-id.xml
----------------------------------------------------------------------
diff --git a/components/camel-dozer/src/test/resources/application-context-map-id.xml b/components/camel-dozer/src/test/resources/application-context-map-id.xml
index a05d7c0..bee16ff 100644
--- a/components/camel-dozer/src/test/resources/application-context-map-id.xml
+++ b/components/camel-dozer/src/test/resources/application-context-map-id.xml
@@ -33,11 +33,19 @@
     <bean id="customer-processor" class="org.apache.camel.converter.dozer.CustomerProcessor"/>
     <bean id="dozerConverterLoader" class="org.apache.camel.converter.dozer.DozerTypeConverterLoader"/>
 
-    <bean id="mapper" class="org.dozer.DozerBeanMapper">
+    <bean id="mapConfig" class="org.apache.camel.converter.dozer.DozerBeanMapperConfiguration">
         <property name="mappingFiles">
             <list>
                 <value>mapping-map-id.xml</value>
             </list>
         </property>
     </bean>
-</beans>
\ No newline at end of file
+
+    <bean id="mapperFactory" class="org.apache.camel.converter.dozer.MapperFactory">
+        <constructor-arg index="0" ref="camel"/>
+        <constructor-arg index="1" ref="mapConfig"/>
+    </bean>
+
+    <bean id="mapper" class="org.dozer.Mapper" factory-bean="mapperFactory" factory-method="create"/>
+
+</beans>

http://git-wip-us.apache.org/repos/asf/camel/blob/b1f8b6f9/components/camel-dozer/src/test/resources/application-context.xml
----------------------------------------------------------------------
diff --git a/components/camel-dozer/src/test/resources/application-context.xml b/components/camel-dozer/src/test/resources/application-context.xml
index 5c69a49..51366fc 100644
--- a/components/camel-dozer/src/test/resources/application-context.xml
+++ b/components/camel-dozer/src/test/resources/application-context.xml
@@ -33,11 +33,19 @@
     <bean id="customer-processor" class="org.apache.camel.converter.dozer.CustomerProcessor"/>
     <bean id="dozerConverterLoader" class="org.apache.camel.converter.dozer.DozerTypeConverterLoader"/>
 
-    <bean id="mapper" class="org.dozer.DozerBeanMapper">
-        <property name="mappingFiles">
-            <list>
-                <value>mapping.xml</value>
-            </list>
-        </property>
+    <bean id="mapConfig" class="org.apache.camel.converter.dozer.DozerBeanMapperConfiguration">
+      <property name="mappingFiles">
+        <list>
+          <value>mapping.xml</value>
+        </list>
+      </property>
     </bean>
-</beans>
\ No newline at end of file
+
+    <bean id="mapperFactory" class="org.apache.camel.converter.dozer.MapperFactory">
+        <constructor-arg index="0" ref="camel"/>
+        <constructor-arg index="1" ref="mapConfig"/>
+    </bean>
+
+    <bean id="mapper" class="org.dozer.Mapper" factory-bean="mapperFactory" factory-method="create"/>
+
+</beans>

http://git-wip-us.apache.org/repos/asf/camel/blob/b1f8b6f9/components/camel-dozer/src/test/resources/bean-to-bean-dozer-mappings.xml
----------------------------------------------------------------------
diff --git a/components/camel-dozer/src/test/resources/bean-to-bean-dozer-mappings.xml b/components/camel-dozer/src/test/resources/bean-to-bean-dozer-mappings.xml
index 422bc0a..00db0a7 100644
--- a/components/camel-dozer/src/test/resources/bean-to-bean-dozer-mappings.xml
+++ b/components/camel-dozer/src/test/resources/bean-to-bean-dozer-mappings.xml
@@ -17,8 +17,9 @@
     limitations under the License.
 
 -->
-<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
-    xsi:schemaLocation="http://dozer.sourceforge.net  http://dozer.sourceforge.net/schema/beanmapping.xsd">
+<mappings xmlns="http://dozermapper.github.io/schema/bean-mapping"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping http://dozermapper.github.io/schema/bean-mapping.xsd">
     
     <mapping>
         <class-a>org.apache.camel.converter.dozer.model.CustomerA</class-a>

http://git-wip-us.apache.org/repos/asf/camel/blob/b1f8b6f9/components/camel-dozer/src/test/resources/bean-to-map-dozer-mappings.xml
----------------------------------------------------------------------
diff --git a/components/camel-dozer/src/test/resources/bean-to-map-dozer-mappings.xml b/components/camel-dozer/src/test/resources/bean-to-map-dozer-mappings.xml
index 2b4fec8..c8d0177 100644
--- a/components/camel-dozer/src/test/resources/bean-to-map-dozer-mappings.xml
+++ b/components/camel-dozer/src/test/resources/bean-to-map-dozer-mappings.xml
@@ -17,8 +17,9 @@
     limitations under the License.
 
 -->
-<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
-    xsi:schemaLocation="http://dozer.sourceforge.net  http://dozer.sourceforge.net/schema/beanmapping.xsd">
+<mappings xmlns="http://dozermapper.github.io/schema/bean-mapping"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping http://dozermapper.github.io/schema/bean-mapping.xsd">
     
     <mapping>
         <class-a>org.apache.camel.converter.dozer.model.Customer</class-a>

http://git-wip-us.apache.org/repos/asf/camel/blob/b1f8b6f9/components/camel-dozer/src/test/resources/mapping-map-id.xml
----------------------------------------------------------------------
diff --git a/components/camel-dozer/src/test/resources/mapping-map-id.xml b/components/camel-dozer/src/test/resources/mapping-map-id.xml
index 71b011f..db8abaa 100644
--- a/components/camel-dozer/src/test/resources/mapping-map-id.xml
+++ b/components/camel-dozer/src/test/resources/mapping-map-id.xml
@@ -17,8 +17,10 @@
     limitations under the License.
 
 -->
-<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://dozer.sourceforge.net  http://dozer.sourceforge.net/schema/beanmapping.xsd">
+<mappings xmlns="http://dozermapper.github.io/schema/bean-mapping"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping http://dozermapper.github.io/schema/bean-mapping.xsd">
+
   <mapping map-id="foo">
     <class-a>org.apache.camel.converter.dozer.service.Customer</class-a>
     <class-b>org.apache.camel.converter.dozer.model.Customer</class-b>
@@ -31,4 +33,4 @@
       <b>address.zipCode</b>
     </field>
   </mapping>
-</mappings>
\ No newline at end of file
+</mappings>

http://git-wip-us.apache.org/repos/asf/camel/blob/b1f8b6f9/components/camel-dozer/src/test/resources/mapping.xml
----------------------------------------------------------------------
diff --git a/components/camel-dozer/src/test/resources/mapping.xml b/components/camel-dozer/src/test/resources/mapping.xml
index 3028c1b..1085282 100644
--- a/components/camel-dozer/src/test/resources/mapping.xml
+++ b/components/camel-dozer/src/test/resources/mapping.xml
@@ -17,8 +17,10 @@
     limitations under the License.
 
 -->
-<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://dozer.sourceforge.net  http://dozer.sourceforge.net/schema/beanmapping.xsd">
+<mappings xmlns="http://dozermapper.github.io/schema/bean-mapping"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping http://dozermapper.github.io/schema/bean-mapping.xsd">
+
   <mapping>
     <class-a>org.apache.camel.converter.dozer.service.Customer</class-a>
     <class-b>org.apache.camel.converter.dozer.model.Customer</class-b>
@@ -31,4 +33,4 @@
       <b>address.zipCode</b>
     </field>
   </mapping>
-</mappings>
\ No newline at end of file
+</mappings>

http://git-wip-us.apache.org/repos/asf/camel/blob/b1f8b6f9/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/customMapping.xml
----------------------------------------------------------------------
diff --git a/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/customMapping.xml b/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/customMapping.xml
index 74f12c1..fe41e40 100644
--- a/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/customMapping.xml
+++ b/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/customMapping.xml
@@ -17,7 +17,10 @@
     limitations under the License.
 
 -->
-<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://dozer.sourceforge.net http://dozer.sourceforge.net/schema/beanmapping.xsd">
+<mappings xmlns="http://dozermapper.github.io/schema/bean-mapping"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping http://dozermapper.github.io/schema/bean-mapping.xsd">
+
     <mapping>
         <class-a>org.apache.camel.component.dozer.example.abc.ABCOrder</class-a>
         <class-b>org.apache.camel.component.dozer.example.xyz.XYZOrder</class-b>

http://git-wip-us.apache.org/repos/asf/camel/blob/b1f8b6f9/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/dozerBeanMapping.xml
----------------------------------------------------------------------
diff --git a/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/dozerBeanMapping.xml b/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/dozerBeanMapping.xml
index 5bc3a4f..03e6d73 100644
--- a/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/dozerBeanMapping.xml
+++ b/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/dozerBeanMapping.xml
@@ -17,7 +17,10 @@
     limitations under the License.
 
 -->
-<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://dozer.sourceforge.net http://dozer.sourceforge.net/schema/beanmapping.xsd">
+<mappings xmlns="http://dozermapper.github.io/schema/bean-mapping"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping http://dozermapper.github.io/schema/bean-mapping.xsd">
+
     <mapping>
         <class-a>org.apache.camel.component.dozer.example.abc.ABCOrder</class-a>
         <class-b>org.apache.camel.component.dozer.example.xyz.XYZOrder</class-b>

http://git-wip-us.apache.org/repos/asf/camel/blob/b1f8b6f9/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/expressionMapping.xml
----------------------------------------------------------------------
diff --git a/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/expressionMapping.xml b/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/expressionMapping.xml
index 3e36fa9..1640e25 100644
--- a/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/expressionMapping.xml
+++ b/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/expressionMapping.xml
@@ -17,7 +17,10 @@
     limitations under the License.
 
 -->
-<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://dozer.sourceforge.net http://dozer.sourceforge.net/schema/beanmapping.xsd">
+<mappings xmlns="http://dozermapper.github.io/schema/bean-mapping"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping http://dozermapper.github.io/schema/bean-mapping.xsd">
+
     <mapping>
         <class-a>org.apache.camel.component.dozer.example.abc.ABCOrder</class-a>
         <class-b>org.apache.camel.component.dozer.example.xyz.XYZOrder</class-b>

http://git-wip-us.apache.org/repos/asf/camel/blob/b1f8b6f9/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/expressionMappingClasspath.xml
----------------------------------------------------------------------
diff --git a/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/expressionMappingClasspath.xml b/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/expressionMappingClasspath.xml
index a55d6db..5c303ab 100644
--- a/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/expressionMappingClasspath.xml
+++ b/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/expressionMappingClasspath.xml
@@ -17,7 +17,10 @@
     limitations under the License.
 
 -->
-<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://dozer.sourceforge.net http://dozer.sourceforge.net/schema/beanmapping.xsd">
+<mappings xmlns="http://dozermapper.github.io/schema/bean-mapping"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping http://dozermapper.github.io/schema/bean-mapping.xsd">
+
     <mapping>
         <class-a>org.apache.camel.component.dozer.example.abc.ABCOrder</class-a>
         <class-b>org.apache.camel.component.dozer.example.xyz.XYZOrder</class-b>

http://git-wip-us.apache.org/repos/asf/camel/blob/b1f8b6f9/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/expressionMappingFile.xml
----------------------------------------------------------------------
diff --git a/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/expressionMappingFile.xml b/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/expressionMappingFile.xml
index f7b65ef..40859bf 100644
--- a/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/expressionMappingFile.xml
+++ b/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/expressionMappingFile.xml
@@ -17,7 +17,10 @@
     limitations under the License.
 
 -->
-<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://dozer.sourceforge.net http://dozer.sourceforge.net/schema/beanmapping.xsd">
+<mappings xmlns="http://dozermapper.github.io/schema/bean-mapping"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping http://dozermapper.github.io/schema/bean-mapping.xsd">
+
     <mapping>
         <class-a>org.apache.camel.component.dozer.example.abc.ABCOrder</class-a>
         <class-b>org.apache.camel.component.dozer.example.xyz.XYZOrder</class-b>

http://git-wip-us.apache.org/repos/asf/camel/blob/b1f8b6f9/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/variableMapping.xml
----------------------------------------------------------------------
diff --git a/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/variableMapping.xml b/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/variableMapping.xml
index d13f040..978b907 100644
--- a/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/variableMapping.xml
+++ b/components/camel-dozer/src/test/resources/org/apache/camel/component/dozer/variableMapping.xml
@@ -17,7 +17,10 @@
     limitations under the License.
 
 -->
-<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://dozer.sourceforge.net http://dozer.sourceforge.net/schema/beanmapping.xsd">
+<mappings xmlns="http://dozermapper.github.io/schema/bean-mapping"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping http://dozermapper.github.io/schema/bean-mapping.xsd">
+
     <configuration>
         <variables>
             <variable name="CUST_ID">ACME-SALES</variable>

http://git-wip-us.apache.org/repos/asf/camel/blob/b1f8b6f9/parent/pom.xml
----------------------------------------------------------------------
diff --git a/parent/pom.xml b/parent/pom.xml
index 516033f..8717913 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -186,7 +186,7 @@
     <docker-java-bundle-version>3.0.12_1</docker-java-bundle-version>
     <docker-maven-plugin-version>0.21.0</docker-maven-plugin-version>
     <dom4j-bundle-version>1.6.1_5</dom4j-bundle-version>
-    <dozer-version>6.0.0</dozer-version>
+    <dozer-version>6.1.0</dozer-version>
     <drools-version>6.5.0.Final</drools-version>
     <dropbox-version>1.8.2</dropbox-version>
     <easymock-version>3.4</easymock-version>

http://git-wip-us.apache.org/repos/asf/camel/blob/b1f8b6f9/platforms/karaf/features/src/main/resources/features.xml
----------------------------------------------------------------------
diff --git a/platforms/karaf/features/src/main/resources/features.xml b/platforms/karaf/features/src/main/resources/features.xml
index 7cc182d..df4b31b 100644
--- a/platforms/karaf/features/src/main/resources/features.xml
+++ b/platforms/karaf/features/src/main/resources/features.xml
@@ -511,6 +511,7 @@
     <feature version='${project.version}'>camel-core</feature>
     <feature>war</feature>
     <bundle dependency='true'>mvn:com.github.dozermapper/dozer-core/${dozer-version}</bundle>
+    <bundle dependency='true'>mvn:com.github.dozermapper/dozer-schema/${dozer-version}</bundle>
     <bundle dependency='true'>mvn:org.apache.commons/commons-lang3/${commons-lang3-version}</bundle>
     <bundle dependency='true'>mvn:commons-collections/commons-collections/${commons-collections-version}</bundle>
     <bundle dependency='true'>mvn:commons-beanutils/commons-beanutils/${commons-beanutils-version}</bundle>