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 2019/05/27 16:10:29 UTC
[camel] branch master updated: CAMEL-13581: Avoid duplicate
TypeConverter WARNs from when using OSGi.
This is an automated email from the ASF dual-hosted git repository.
davsclaus 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 0192930 CAMEL-13581: Avoid duplicate TypeConverter WARNs from when using OSGi.
0192930 is described below
commit 01929305fda4dd9b9017fd984b00319f368d50ed
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon May 27 18:10:05 2019 +0200
CAMEL-13581: Avoid duplicate TypeConverter WARNs from when using OSGi.
---
.../apache/camel/core/osgi/OsgiTypeConverter.java | 27 +++++++++++++++++++++-
1 file changed, 26 insertions(+), 1 deletion(-)
diff --git a/core/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiTypeConverter.java b/core/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiTypeConverter.java
index f328be8..0c31bc0 100644
--- a/core/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiTypeConverter.java
+++ b/core/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiTypeConverter.java
@@ -43,8 +43,10 @@ import org.apache.camel.impl.converter.DefaultTypeConverter;
import org.apache.camel.impl.engine.DefaultPackageScanClassResolver;
import org.apache.camel.spi.FactoryFinder;
import org.apache.camel.spi.Injector;
+import org.apache.camel.spi.PackageScanClassResolver;
import org.apache.camel.spi.TypeConverterLoader;
import org.apache.camel.spi.TypeConverterRegistry;
+import org.apache.camel.support.SimpleTypeConverter;
import org.apache.camel.support.service.ServiceHelper;
import org.apache.camel.support.service.ServiceSupport;
import org.osgi.framework.BundleContext;
@@ -218,7 +220,7 @@ public class OsgiTypeConverter extends ServiceSupport implements TypeConverter,
protected DefaultTypeConverter createRegistry() {
// base the osgi type converter on the default type converter
- DefaultTypeConverter answer = new DefaultTypeConverter(new DefaultPackageScanClassResolver() {
+ DefaultTypeConverter answer = new OsgiDefaultTypeConverter(new DefaultPackageScanClassResolver() {
@Override
public Set<ClassLoader> getClassLoaders() {
// we only need classloaders for loading core TypeConverterLoaders
@@ -280,4 +282,27 @@ public class OsgiTypeConverter extends ServiceSupport implements TypeConverter,
Spliterator.ORDERED), false);
}
+ private class OsgiDefaultTypeConverter extends DefaultTypeConverter {
+
+ public OsgiDefaultTypeConverter(PackageScanClassResolver resolver, Injector injector, FactoryFinder factoryFinder, boolean loadTypeConverters) {
+ super(resolver, injector, factoryFinder, loadTypeConverters);
+ }
+
+ @Override
+ public void addTypeConverter(Class<?> toType, Class<?> fromType, TypeConverter typeConverter) {
+ // favour keeping the converter that was loaded via TypeConverterLoader META-INF file
+ // as OSGi loads these first and then gets triggered again later when there is both a META-INF/TypeConverter and META-INF/TypeConverterLoaded file
+ // for the same set of type converters and we get duplicates (so this is a way of filtering out duplicates)
+ TypeConverter converter = typeMappings.get(toType, fromType);
+ if (converter != null && converter != typeConverter) {
+ // the converter is already there which we want to keep (optimized via SimpleTypeConverter)
+ if (converter instanceof SimpleTypeConverter) {
+ // okay keep this one
+ return;
+ }
+ }
+ super.addTypeConverter(toType, fromType, typeConverter);
+ }
+ }
+
}