public void load()

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();
    }