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.