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 2022/12/02 08:08:39 UTC
[camel-kamelets] 07/28: Make sure data type resolver works on all runtimes
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 <cd...@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()) {