OsgiDefaultCamelContext.getTypeConverterRegistry() returns null ----------------------------------------------------------------
Key: CAMEL-3143 URL: https://issues.apache.org/activemq/browse/CAMEL-3143 Project: Apache Camel Issue Type: Bug Components: osgi Affects Versions: 2.4.0 Reporter: Claes Redestad The showed up when using dozer as shown in http://camel.apache.org/dozer-type-conversion.html, whose DozerTypeConverterLoader tries to get the type converter registry using: {{{TypeConverterRegistry registry = camelContext.getTypeConverterRegistry();}}} Plausible error: {code:title=OsgiDefaultCamelContext.java} @Override protected TypeConverter createTypeConverter() { return new OsgiTypeConverter(bundleContext, getInjector()); } {code} {code:title=DefaultCamelContext.java} public TypeConverterRegistry getTypeConverterRegistry() { if (typeConverterRegistry == null) { // init type converter as its lazy if (typeConverter == null) { getTypeConverter(); } // type converter is usually the default one that also is the registry if (typeConverter instanceof DefaultTypeConverter) { typeConverterRegistry = (DefaultTypeConverter) typeConverter; } } return typeConverterRegistry; } {code} Error: getTypeConverter() returns an OsgiTypeConverter OsgiTypeConverter does not inherit from DefaultTypeConverter, thus the instanceof returns false => null is returned Solution: Lots of different ways to do this, and it's getting late here. In this case, maybe it's OsgiDefaultCamelContext's responsibility to also override getTypeConverterRegistry with something along the lines of: {code} @Override public TypeConverterRegistry getTypeConverterRegistry() { if (typeConverterRegistry == null) { // init type converter as its lazy if (typeConverter == null) { getTypeConverter(); } // type converter is usually the default one that also is the registry if (typeConverter instanceof OsgiDefaultTypeConverter) { typeConverterRegistry = ((OsgiDefaultTypeConverter) typeConverter).getRegistry(); } } return typeConverterRegistry; } {code} We've employed an (ugly) workaround in a local version of DozerTypeConverterLoader.java: {code:java} TypeConverter typeConverter = camelContext.getTypeConverter(); DefaultTypeConverter registry = null; if (typeConverter instanceof DefaultTypeConverter) { registry = (DefaultTypeConverter)typeConverter; } else if (typeConverter instanceof OsgiTypeConverter) { OsgiTypeConverter osgiTypeConverter = (OsgiTypeConverter)typeConverter; registry = osgiTypeConverter.getRegistry(); } {code} -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.