in library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/AnnotationDataTypeLoader.java [62:113]
public void load(DataTypeRegistry registry) {
ObjectHelper.notNull(camelContext, "camelContext");
if (resolver == null) {
if (camelContext instanceof ExtendedCamelContext) {
resolver = PluginHelper.getPackageScanClassResolver(camelContext);
} else {
resolver = new DefaultPackageScanClassResolver();
}
}
Set<String> packages = new HashSet<>();
LOG.trace("Searching for {} services", META_INF_SERVICES);
try {
ClassLoader ccl = Thread.currentThread().getContextClassLoader();
if (ccl != null) {
findPackages(packages, ccl);
}
findPackages(packages, getClass().getClassLoader());
if (packages.isEmpty()) {
LOG.debug("No package names found to be used for classpath scanning for annotated data types.");
return;
}
} catch (Exception e) {
throw new TypeConverterLoaderException(
"Cannot find package names to be used for classpath scanning for annotated data types.", e);
}
// if there is any packages to scan and load @DataType classes, then do it
if (LOG.isTraceEnabled()) {
LOG.trace("Found data type packages to scan: {}", String.join(", ", packages));
}
Set<Class<?>> scannedClasses = resolver.findAnnotated(DataType.class, packages.toArray(new String[]{}));
if (!scannedClasses.isEmpty()) {
LOG.debug("Found {} packages with {} @DataType classes to load", packages.size(), scannedClasses.size());
// load all the found classes into the type data type registry
for (Class<?> type : scannedClasses) {
if (acceptClass(type)) {
if (LOG.isTraceEnabled()) {
LOG.trace("Loading data type annotation: {}", ObjectHelper.name(type));
}
loadDataType(registry, type);
}
}
}
// now clear the maps so we do not hold references
visitedClasses.clear();
visitedURIs.clear();
}