in core/camel-core-osgi/src/main/java/org/apache/camel/karaf/core/OsgiTypeConverter.java [239:285]
protected DefaultTypeConverter createRegistry() {
// base the osgi type converter on the default type converter
DefaultTypeConverter answer = new OsgiDefaultTypeConverter(new DefaultPackageScanClassResolver() {
@Override
public Set<ClassLoader> getClassLoaders() {
// we only need classloaders for loading core TypeConverterLoaders
return new HashSet<>(Arrays.asList(
DefaultTypeConverter.class.getClassLoader(),
DefaultCamelContext.class.getClassLoader()));
}
}, injector, false, camelContext.isTypeConverterStatisticsEnabled());
// inject CamelContext
answer.setCamelContext(camelContext);
try {
// init before loading core converters
answer.init();
// only load the core type converters, as OSGi activator will keep track on bundles
// being installed/uninstalled and load type converters as part of that process
answer.loadCoreAndFastTypeConverters();
} catch (Exception e) {
throw new RuntimeCamelException("Error loading CoreTypeConverter due: " + e.getMessage(), e);
}
// Load the type converters the tracker has been tracking
// Here we need to use the ServiceReference to check the ranking
ServiceReference<TypeConverterLoader>[] serviceReferences = this.tracker.getServiceReferences();
if (serviceReferences != null) {
ArrayList<ServiceReference<TypeConverterLoader>> servicesList =
new ArrayList<>(Arrays.asList(serviceReferences));
// Just make sure we install the high ranking fallback converter at last
Collections.sort(servicesList);
for (ServiceReference<TypeConverterLoader> sr : servicesList) {
try {
LOG.debug("loading type converter from bundle: {}", sr.getBundle().getSymbolicName());
((TypeConverterLoader)this.tracker.getService(sr)).load(answer);
} catch (Throwable t) {
throw new RuntimeCamelException("Error loading type converters from service: " + sr + " due: " + t.getMessage(), t);
}
}
}
LOG.trace("Created TypeConverter: {}", answer);
return answer;
}