protected void registerTypeConverterLoader()

in core/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/impl/Activator.java [254:294]


    protected void registerTypeConverterLoader(Bundle bundle, List<BaseService> resolvers) {
        if (canSee(bundle, TypeConverter.class)) {
            URL url1 = bundle.getEntry(META_INF_TYPE_CONVERTER);
            URL url2 = bundle.getEntry(META_INF_TYPE_CONVERTER_LOADER);
            URL url3 = bundle.getEntry(META_INF_FALLBACK_TYPE_CONVERTER);
            if (url2 != null) {
                LOG.debug("Found TypeConverterLoader in bundle {}", bundle.getSymbolicName());
                Set<String> packages = getConverterPackages(bundle.getEntry(META_INF_TYPE_CONVERTER_LOADER));

                if (LOG.isTraceEnabled()) {
                    LOG.trace("Found {} {} packages: {}", packages.size(), META_INF_TYPE_CONVERTER_LOADER, packages);
                }
                for (String pkg : packages) {

                    if (StringHelper.isClassName(pkg)) {
                        // its a FQN class name so load it directly
                        LOG.trace("Loading {} class", pkg);
                        try {
                            Class<?> clazz = bundle.loadClass(pkg);
                            BundleTypeConverterLoader bundleTypeConverterLoader =
                                new BundleTypeConverterLoader(bundle, url3 != null);
                            bundleTypeConverterLoader.setTypeConverterLoader((TypeConverterLoader)clazz.getDeclaredConstructor().newInstance());
                            resolvers.add(bundleTypeConverterLoader);
                            BundleTypeConverterLoader fallBackBundleTypeConverterLoader =
                                new BundleTypeConverterLoader(bundle, url3 != null);
                            // the class could be found and loaded so continue to next
                            resolvers.add(fallBackBundleTypeConverterLoader);
                            continue;
                        } catch (Throwable t) {
                            // Ignore
                            LOG.trace("Failed to load " + pkg + " class due " + t.getMessage() + ". This exception will be ignored.", t);
                        }
                    }
                }

            } else if (url1 != null || url3 != null) {
                LOG.debug("Found TypeConverter in bundle {}", bundle.getSymbolicName());
                resolvers.add(new BundleTypeConverterLoader(bundle, url3 != null));
            }
        }
    }