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 <garethahe...@gmail.com> Authored: Tue Aug 8 18:29:33 2017 +0100 Committer: Andrea Cosentino <anco...@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>