This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/master by this push:
     new c9fce70  [CAMEL-12440] Upgraded dozer to 6.2
c9fce70 is described below

commit c9fce70a63bcb8c3e4c31f07b65f5f7f8724a4cc
Author: Gareth Healy <garethahe...@gmail.com>
AuthorDate: Thu Apr 12 23:28:38 2018 +0100

    [CAMEL-12440] Upgraded dozer to 6.2
---
 components/camel-dozer/pom.xml                     |  11 +-
 .../camel/component/dozer/DozerEndpoint.java       |   5 -
 .../dozer/DozerBeanMapperConfiguration.java        |   2 -
 .../camel/converter/dozer/MapperFactory.java       | 175 +++++----------------
 parent/pom.xml                                     |   4 +-
 .../karaf/features/src/main/resources/features.xml |   7 +-
 .../camel-spring-boot-dependencies/pom.xml         |   2 +-
 7 files changed, 51 insertions(+), 155 deletions(-)

diff --git a/components/camel-dozer/pom.xml b/components/camel-dozer/pom.xml
index ec8ca5b..6664fb3 100644
--- a/components/camel-dozer/pom.xml
+++ b/components/camel-dozer/pom.xml
@@ -48,17 +48,20 @@
       <groupId>com.github.dozermapper</groupId>
       <artifactId>dozer-core</artifactId>
     </dependency>
+
+    <!-- Expressions -->
     <dependency>
       <groupId>javax.el</groupId>
       <artifactId>javax.el-api</artifactId>
-      <version>${javax.el-api-version}</version>
+      <version>${javax.el3-version}</version>
     </dependency>
-    <!-- must use this glassfish EL implementation -->
     <dependency>
-      <groupId>org.glassfish.web</groupId>
+      <groupId>org.glassfish</groupId>
       <artifactId>javax.el</artifactId>
-      <version>${javax.el-version}</version>
+      <version>${javax.el3-version}</version>
     </dependency>
+
+    <!-- Testing -->
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
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 23b35ff..c12cdaa 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
@@ -21,8 +21,6 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
 
-import javax.el.ExpressionFactory;
-
 import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
@@ -35,9 +33,6 @@ import org.apache.camel.spi.UriParam;
 import org.apache.camel.util.ResourceHelper;
 import org.dozer.CustomConverter;
 import org.dozer.Mapper;
-import org.dozer.config.BeanContainer;
-import org.dozer.loader.xml.ELEngine;
-import org.dozer.loader.xml.ExpressionElementReader;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
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 e29ca58..e20fa4f 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,8 +19,6 @@ 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;
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
index bc57250..4886b3c 100644
--- 
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
@@ -16,23 +16,17 @@
  */
 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.dozer.config.SettingsKeys;
+import org.dozer.el.DefaultELEngine;
+import org.dozer.el.ELEngine;
+import org.dozer.el.ELExpressionFactory;
+import org.dozer.el.NoopELEngine;
+import org.dozer.el.TcclELEngine;
+import org.dozer.util.RuntimeUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -57,147 +51,50 @@ public class MapperFactory {
     }
 
     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());
-            }
+        configureSettings();
+
+        Mapper mapper;
+        if (configuration == null) {
+            mapper = DozerBeanMapperBuilder.buildDefault();
+        } else {
+            mapper = DozerBeanMapperBuilder.create()
+                    .withMappingFiles(configuration.getMappingFiles())
+                    .withCustomConverters(configuration.getCustomConverters())
+                    .withEventListeners(configuration.getEventListeners())
+                    
.withCustomConvertersWithIds(configuration.getCustomConvertersWithId())
+                    
.withMappingBuilders(configuration.getBeanMappingBuilders())
+                    
.withCustomFieldMapper(configuration.getCustomFieldMapper())
+                    .withELEngine(createELEngine())
+                    .build();
         }
 
-        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);
-        }
+    private void configureSettings() {
+        System.setProperty(SettingsKeys.CLASS_LOADER_BEAN, 
DozerThreadContextClassLoader.class.getName());
     }
 
-    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();
+    private ELEngine createELEngine() {
+        ELEngine answer;
 
-                beanContainer.setElEngine(engine);
-            }
+        ClassLoader appcl = camelContext.getApplicationContextClassLoader();
+        ClassLoader auxcl = appcl == null ? 
DozerEndpoint.class.getClassLoader() : appcl;
 
-            beanContainer.setElementReader(new 
ExpressionElementReader(beanContainer.getElEngine()));
-        } finally {
-            Thread.currentThread().setContextClassLoader(tccl);
-            if (elprop == null) {
-                System.clearProperty("javax.el.ExpressionFactory");
+        if (ELExpressionFactory.isSupported(auxcl)) {
+            if (RuntimeUtils.isOSGi()) {
+                answer = new 
TcclELEngine(ELExpressionFactory.newInstance(auxcl), auxcl);
             } else {
-                System.setProperty("javax.el.ExpressionFactory", elprop);
+                answer = new 
DefaultELEngine(ELExpressionFactory.newInstance());
             }
-        }
-    }
-
-    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);
+        } else {
+            LOG.warn("Expressions are not supported by Dozer. Are you missing 
javax.el dependency?");
 
-            prop = field.get(mapper);
-        } catch (Exception e) {
-            throw new IllegalStateException("Cannot retrieve DozerBeanMapper." 
+ fieldName + " due " + e.getMessage(), e);
+            answer = new NoopELEngine();
         }
 
-        return prop;
+        return answer;
     }
 }
diff --git a/parent/pom.xml b/parent/pom.xml
index 1aa665e..429f5b2 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -189,7 +189,7 @@
     <docker-java-bundle-version>3.0.14_1</docker-java-bundle-version>
     <docker-maven-plugin-version>0.25.0</docker-maven-plugin-version>
     <dom4j-bundle-version>1.6.1_5</dom4j-bundle-version>
-    <dozer-version>6.1.0</dozer-version>
+    <dozer-version>6.2.0</dozer-version>
     <drools-version>7.3.0.Final</drools-version>
     <dropbox-version>3.0.6</dropbox-version>
     
<eclipse-equinox-common-version>3.3.0-v20070426</eclipse-equinox-common-version>
@@ -355,6 +355,7 @@
     <javassist-version>3.20.0-GA</javassist-version>
     <javax.el-api-version>2.2.5</javax.el-api-version>
     <javax.el-version>2.2.5</javax.el-version>
+    <javax.el3-version>3.0.0</javax.el3-version>
     
<javax.el-api-hibernate-validator-version>3.0.1-b04</javax.el-api-hibernate-validator-version>
     
<javax.el-hibernate-validator-version>3.0.1-b10</javax.el-hibernate-validator-version>
     <javax-inject-bundle-version>1_2</javax-inject-bundle-version>
@@ -525,6 +526,7 @@
     
<networknt-json-schema-validator-version>0.1.17</networknt-json-schema-validator-version>
     <noggit-bundle-version>0.5_1</noggit-bundle-version>
     <!-- should be in-sync with deltaspike -->
+    <objenesis-version>2.6</objenesis-version>
     <openwebbeans1-version>1.2.7</openwebbeans1-version>
     <openwebbeans-version>1.7.3</openwebbeans-version>
     <oauth-provider-bundle-version>20100527_1</oauth-provider-bundle-version>
diff --git a/platforms/karaf/features/src/main/resources/features.xml 
b/platforms/karaf/features/src/main/resources/features.xml
index b6080c2..b1cb57b 100644
--- a/platforms/karaf/features/src/main/resources/features.xml
+++ b/platforms/karaf/features/src/main/resources/features.xml
@@ -538,12 +538,13 @@
     <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>
-    <bundle 
dependency='true'>mvn:javax.el/javax.el-api/${javax.el-api-version}</bundle>
-    <bundle 
dependency='true'>mvn:org.glassfish.web/javax.el/${javax.el-version}</bundle>
+    <bundle 
dependency='true'>mvn:commons-io/commons-io/${commons-io-version}</bundle>
+    <bundle 
dependency='true'>mvn:javax.el/javax.el-api/${javax.el3-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.glassfish/javax.el/${javax.el3-version}</bundle>
+    <bundle 
dependency='true'>mvn:org.objenesis/objenesis/${objenesis-version}</bundle>
     <bundle>mvn:org.apache.camel/camel-dozer/${project.version}</bundle>
   </feature>
   <feature name='camel-dropbox' version='${project.version}' resolver='(obr)' 
start-level='50'>
diff --git 
a/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml 
b/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
index c7b39f4..7db5e03 100644
--- 
a/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
+++ 
b/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
@@ -88,7 +88,7 @@
       <dependency>
         <groupId>com.github.dozermapper</groupId>
         <artifactId>dozer-core</artifactId>
-        <version>6.1.0</version>
+        <version>6.2.0</version>
       </dependency>
       <dependency>
         <groupId>com.google.code.scriptengines</groupId>

-- 
To stop receiving notification emails like this one, please contact
acosent...@apache.org.

Reply via email to