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

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

commit eb6b71ef3fceb00d3d13838703047e43e25b4b18
Author: Christoph Deppisch <cdeppi...@redhat.com>
AuthorDate: Fri Nov 18 15:17:34 2022 +0100

    Make sure data type resolver works on all runtimes
---
 .../format/DefaultDataTypeConverterResolver.java   | 42 ++++++----------------
 .../utils/format/DefaultDataTypeRegistry.java      |  7 ++--
 2 files changed, 15 insertions(+), 34 deletions(-)

diff --git 
a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/DefaultDataTypeConverterResolver.java
 
b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/DefaultDataTypeConverterResolver.java
index 5fdaa790..9d5e8b23 100644
--- 
a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/DefaultDataTypeConverterResolver.java
+++ 
b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/DefaultDataTypeConverterResolver.java
@@ -23,7 +23,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.kamelets.utils.format.spi.DataTypeConverter;
 import org.apache.camel.kamelets.utils.format.spi.DataTypeConverterResolver;
-import org.apache.camel.spi.FactoryFinder;
+import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -34,51 +34,31 @@ import org.slf4j.LoggerFactory;
  */
 public class DefaultDataTypeConverterResolver implements 
DataTypeConverterResolver {
 
-    public static final String RESOURCE_PATH = 
"META-INF/services/org/apache/camel/datatype/converter/";
+    public static final String DATA_TYPE_CONVERTER_RESOURCE_PATH = 
"META-INF/services/org/apache/camel/datatype/converter/";
 
     private static final Logger LOG = 
LoggerFactory.getLogger(DefaultDataTypeConverterResolver.class);
 
-    private FactoryFinder factoryFinder;
-
     @Override
     public Optional<DataTypeConverter> resolve(String scheme, String name, 
CamelContext context) {
         String converterName = String.format("%s-%s", scheme, name);
 
         if (getLog().isDebugEnabled()) {
-            getLog().debug("Resolving data type converter {} via: {}{}", 
converterName, RESOURCE_PATH, converterName);
-        }
-
-        Class<?> type = findConverter(converterName, context);
-        if (type == null) {
-            // not found
-            return Optional.empty();
+            getLog().debug("Resolving data type converter {} via: {}{}", 
converterName, DATA_TYPE_CONVERTER_RESOURCE_PATH, converterName);
         }
 
-        if (getLog().isDebugEnabled()) {
+        Optional<DataTypeConverter> converter = findConverter(converterName, 
context);
+        if (getLog().isDebugEnabled() && converter.isPresent()) {
             getLog().debug("Found data type converter: {} via type: {} via: 
{}{}", converterName,
-                    type.getName(), factoryFinder.getResourcePath(), 
converterName);
+                    ObjectHelper.name(converter.getClass()), 
DATA_TYPE_CONVERTER_RESOURCE_PATH, converterName);
         }
 
-        // create the converter instance
-        if (DataTypeConverter.class.isAssignableFrom(type)) {
-            try {
-                return Optional.of((DataTypeConverter) 
context.getInjector().newInstance(type));
-            } catch (NoClassDefFoundError e) {
-                LOG.debug("Ignoring converter type: {} as a dependent class 
could not be found: {}",
-                        type.getCanonicalName(), e, e);
-            }
-        } else {
-            throw new IllegalArgumentException("Type is not a 
DataTypeConverter implementation. Found: " + type.getName());
-        }
-
-        return Optional.empty();
+        return converter;
     }
 
-    private Class<?> findConverter(String name, CamelContext context) {
-        if (factoryFinder == null) {
-            factoryFinder = 
context.adapt(ExtendedCamelContext.class).getFactoryFinder(RESOURCE_PATH);
-        }
-        return factoryFinder.findClass(name).orElse(null);
+    private Optional<DataTypeConverter> findConverter(String name, 
CamelContext context) {
+        return context.adapt(ExtendedCamelContext.class)
+                .getBootstrapFactoryFinder(DATA_TYPE_CONVERTER_RESOURCE_PATH)
+                .newInstance(name, DataTypeConverter.class);
     }
 
     protected Logger getLog() {
diff --git 
a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/DefaultDataTypeRegistry.java
 
b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/DefaultDataTypeRegistry.java
index 0e262d28..18effcc9 100644
--- 
a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/DefaultDataTypeRegistry.java
+++ 
b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/DefaultDataTypeRegistry.java
@@ -30,6 +30,7 @@ import 
org.apache.camel.kamelets.utils.format.spi.DataTypeConverter;
 import org.apache.camel.kamelets.utils.format.spi.DataTypeConverterResolver;
 import org.apache.camel.kamelets.utils.format.spi.DataTypeLoader;
 import org.apache.camel.kamelets.utils.format.spi.DataTypeRegistry;
+import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.service.ServiceSupport;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
@@ -104,7 +105,7 @@ public class DefaultDataTypeRegistry extends ServiceSupport 
implements DataTypeR
             loader.load(this);
         }
 
-        LOG.debug("Loaded {} initial data type converters", 
dataTypeConverters.size());
+        LOG.debug("Loaded {} schemes holding {} data type converters", 
dataTypeConverters.size(), 
dataTypeConverters.values().stream().mapToInt(List::size).sum());
     }
 
     @Override
@@ -128,8 +129,8 @@ public class DefaultDataTypeRegistry extends ServiceSupport 
implements DataTypeR
         }
 
         // Looking for matching beans in Camel registry first
-        Optional<DataTypeConverter> dataTypeConverter = 
Optional.ofNullable(camelContext.getRegistry()
-                .lookupByNameAndType(String.format("%s-%s", scheme, name), 
DataTypeConverter.class));
+        Optional<DataTypeConverter> dataTypeConverter = 
Optional.ofNullable(CamelContextHelper.lookup(getCamelContext(),
+                String.format("%s-%s", scheme, name), 
DataTypeConverter.class));
 
         if (dataTypeConverter.isPresent()) {
             if (LOG.isDebugEnabled()) {

Reply via email to