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()) {