You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2016/01/28 11:27:17 UTC
[2/2] camel git commit: [CAMEL-9545] Dozer classloading may fail with
spring based context
[CAMEL-9545] Dozer classloading may fail with spring based context
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/740a5a73
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/740a5a73
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/740a5a73
Branch: refs/heads/master
Commit: 740a5a73c2ead8b56ce10e4f112b55fec75e8101
Parents: 626e08d
Author: Thomas Diesler <th...@jboss.com>
Authored: Thu Jan 28 11:18:08 2016 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Jan 28 11:25:56 2016 +0100
----------------------------------------------------------------------
.../camel/component/dozer/DozerComponent.java | 27 +++++++++++++-------
.../camel/component/dozer/DozerEndpoint.java | 12 ++++-----
.../dozer/DozerTypeConverterLoader.java | 17 +++---------
3 files changed, 27 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/740a5a73/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 764bf35..f401798 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
@@ -17,53 +17,62 @@
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;
public class DozerComponent extends UriEndpointComponent {
-
+
private static final Logger LOG = LoggerFactory.getLogger(DozerComponent.class);
public DozerComponent() {
super(DozerEndpoint.class);
- initDozerSettings();
}
-
+
public DozerComponent(CamelContext context) {
super(context, DozerEndpoint.class);
- initDozerSettings();
}
-
+
protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
DozerConfiguration config = new DozerConfiguration();
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);
}
-
- private void initDozerSettings() {
+
+ 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 {
- GlobalSettings settings = GlobalSettings.getInstance();
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);
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/740a5a73/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 2d48d11..9e056b1 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
@@ -17,6 +17,7 @@
package org.apache.camel.component.dozer;
import java.io.InputStream;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@@ -89,15 +90,15 @@ public class DozerEndpoint extends DefaultEndpoint {
public void setConfiguration(DozerConfiguration configuration) {
this.configuration = configuration;
}
-
+
CustomMapper getCustomMapper() {
return customMapper;
}
-
+
VariableMapper getVariableMapper() {
return variableMapper;
}
-
+
ExpressionMapper getExpressionMapper() {
return expressionMapper;
}
@@ -122,9 +123,9 @@ public class DozerEndpoint extends DefaultEndpoint {
super.doStop();
// noop
}
-
+
private DozerBeanMapper createDozerBeanMapper() throws Exception {
- DozerBeanMapper answer = new DozerBeanMapper();
+ DozerBeanMapper answer = DozerComponent.createDozerBeanMapper(Collections.<String>emptyList());
InputStream mapStream = null;
try {
LOG.info("Loading Dozer mapping file {}.", configuration.getMappingFile());
@@ -134,7 +135,6 @@ public class DozerEndpoint extends DefaultEndpoint {
} finally {
IOHelper.close(mapStream);
}
-
return answer;
}
http://git-wip-us.apache.org/repos/asf/camel/blob/740a5a73/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 9d6d3ae..f9396a9 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
@@ -16,7 +16,6 @@
*/
package org.apache.camel.converter.dozer;
-import java.lang.reflect.Field;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
@@ -28,17 +27,16 @@ 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.ReflectionHelper;
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.config.GlobalSettings;
import org.dozer.loader.api.BeanMappingBuilder;
import org.dozer.loader.xml.MappingFileReader;
import org.dozer.loader.xml.XMLParserFactory;
@@ -101,15 +99,6 @@ public class DozerTypeConverterLoader extends ServiceSupport implements CamelCon
* @param configuration dozer mapping bean configuration.
*/
public DozerTypeConverterLoader(CamelContext camelContext, DozerBeanMapperConfiguration configuration) {
- 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 CamelToDozerClassResolverAdapter as classloader due " + e.getMessage(), e);
- }
-
ClassLoader tccl = Thread.currentThread().getContextClassLoader();
try {
ClassLoader appcl = camelContext.getApplicationContextClassLoader();
@@ -241,9 +230,9 @@ public class DozerTypeConverterLoader extends ServiceSupport implements CamelCon
public static DozerBeanMapper createDozerBeanMapper(DozerBeanMapperConfiguration configuration) {
DozerBeanMapper mapper;
if (configuration.getMappingFiles() != null) {
- mapper = new DozerBeanMapper(configuration.getMappingFiles());
+ mapper = DozerComponent.createDozerBeanMapper(configuration.getMappingFiles());
} else {
- mapper = new DozerBeanMapper();
+ mapper = DozerComponent.createDozerBeanMapper(Collections.<String>emptyList());
}
if (configuration.getCustomConverters() != null) {
mapper.setCustomConverters(configuration.getCustomConverters());