[ https://issues.apache.org/activemq/browse/CAMEL-3143?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=62015#action_62015 ]
Claes Redestad commented on CAMEL-3143: --------------------------------------- Nicely done! We've gotten dozer to work in ServiceMix 4.3 by explicitly importing the resource folder which contains the dozer mapping file, i.e. {{<Export-Package>mappings</Export-Package>}} in the maven felix plugin. We had to get this to work inside ServiceMix 4.3, so we improved the previous temporary workaround some to account for camel-core-osgi being a private package with an even *uglier* hack to account for the mindboggling fact that OSGi can load stuff in different classloaders, making us unable to actually cast to OsgiTypeConverter (as in our previous workaround - test code first, good, yes yes): {code} TypeConverter typeConverter = camelContext.getTypeConverter(); try { Method method = typeConverter.getClass().getMethod("getRegistry"); registry = (DefaultTypeConverter)method.invoke(typeConverter); } catch (Throwable t) { registry = (DefaultTypeConverter)typeConverter; } {code} Cheers! > 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 > Assignee: Claus Ibsen > Fix For: 2.5.0 > > > 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.