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 2018/04/13 08:26:53 UTC
[camel] branch master updated: [CAMEL-12440] Upgraded dozer to 6.2
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 <ga...@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
acosentino@apache.org.