You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@camel.apache.org by "Claes Redestad (JIRA)" <ji...@apache.org> on 2010/09/21 21:40:40 UTC
[jira] Created: (CAMEL-3143)
OsgiDefaultCamelContext.getTypeConverterRegistry() returns null
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.
[jira] Commented: (CAMEL-3143)
OsgiDefaultCamelContext.getTypeConverterRegistry() returns null
Posted by "Claus Ibsen (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/activemq/browse/CAMEL-3143?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=61985#action_61985 ]
Claus Ibsen commented on CAMEL-3143:
------------------------------------
Dozer is not OSGi compliant.
The Dozer team is working on integration out of the box with Apache Camel.
> 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
>
> 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.
[jira] Assigned: (CAMEL-3143)
OsgiDefaultCamelContext.getTypeConverterRegistry() returns null
Posted by "Claus Ibsen (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/activemq/browse/CAMEL-3143?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Claus Ibsen reassigned CAMEL-3143:
----------------------------------
Assignee: Claus Ibsen
> 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
>
> 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.
[jira] Commented: (CAMEL-3143)
OsgiDefaultCamelContext.getTypeConverterRegistry() returns null
Posted by "Claus Ibsen (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/activemq/browse/CAMEL-3143?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=61979#action_61979 ]
Claus Ibsen commented on CAMEL-3143:
------------------------------------
Yeah lets add a dozer test in camel-itest-osgi. Then we can look at a nicer solution to this
> 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
>
> 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.
[jira] Commented: (CAMEL-3143)
OsgiDefaultCamelContext.getTypeConverterRegistry() returns null
Posted by "Claus Ibsen (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/activemq/browse/CAMEL-3143?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=61988#action_61988 ]
Claus Ibsen commented on CAMEL-3143:
------------------------------------
See here
http://sourceforge.net/tracker/?func=detail&aid=3022810&group_id=133517&atid=727371
As far as in the current camel-dozer component we cannot make it osgi compliant due {{DozerBeanMapper}} being poorly configurable. So we cannot configure how the mapping files should be loaded, by using a custom loader.
> 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
>
> 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.
[jira] Commented: (CAMEL-3143)
OsgiDefaultCamelContext.getTypeConverterRegistry() returns null
Posted by "Björn Bength (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/activemq/browse/CAMEL-3143?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=61995#action_61995 ]
Björn Bength commented on CAMEL-3143:
-------------------------------------
Hello Claus,
I'm a colleague of Claes,
This ticket (as I assume you understand) is not related directly to Dozer. The same null pointer is encountered for me
when i try to explicitly add type converters and fallback converters using java code in our routebuilders in servicemix 4.3.
About dozer:
I can confirm that Dozer could be simpler to use in OSGi but we currently have it running in a few bundles in camel contexts
in ServiceMix 4.2 with mapping files.
An upgrade to ServiceMix 4.3 encountered this problem that Claes did work around . However, as you you know,
the camel and osgi refactoring last time around seems to have hidden a few camel osgi packages as private, which means that, with this workaround we need access to these hidden osgi classes. But thats another story..
> 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.
[jira] Commented: (CAMEL-3143)
OsgiDefaultCamelContext.getTypeConverterRegistry() returns null
Posted by "Claus Ibsen (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/activemq/browse/CAMEL-3143?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=61997#action_61997 ]
Claus Ibsen commented on CAMEL-3143:
------------------------------------
Thanks Bjorn.
I have fixed it so the {{getTypeConverterRegistry}} on {{CamelContext}} returns the osgi aware which is now also a {{TypeConverterRegistry}} so you can add your custom type converters directly to it. So the ugly hack is not needed.
Also I have refined the code in {{DozerTypeConverterLoader}} to not use the Dozer CustomerMappingLoader which doesn't work in OSGi.
Now the mapping files can be correctly loaded in OSGi.
However Dozer bits me later when you use the {{DozerBeanMapper}} because it want's to load the mapping file once again.
And the Dozer API is unfriendly to customize so we can't work around this.
> 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.
[jira] Commented: (CAMEL-3143)
OsgiDefaultCamelContext.getTypeConverterRegistry() returns null
Posted by "Claus Ibsen (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/activemq/browse/CAMEL-3143?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=61990#action_61990 ]
Claus Ibsen commented on CAMEL-3143:
------------------------------------
Also {{MappingProcessor}} which does the actual mapping is also a big heavy weight and not easily customizable.
The {{DozerBeanMapper}} will load the mapping files using thread context classloader which doesnt work in that way in OSGi land.
So we end up with this error
{code}
Caused by: org.dozer.MappingException: Unable to locate dozer mapping file [org/apache/camel/itest/osgi/dozer/dozer-mapping.xml] in the classpath!
at org.dozer.util.MappingUtils.throwMappingException(MappingUtils.java:93)
at org.dozer.util.MappingValidator.validateURL(MappingValidator.java:61)
at org.dozer.loader.CustomMappingsLoader.loadFromFiles(CustomMappingsLoader.java:101)
at org.dozer.loader.CustomMappingsLoader.load(CustomMappingsLoader.java:57)
at org.dozer.DozerBeanMapper.loadCustomMappings(DozerBeanMapper.java:153)
at org.dozer.DozerBeanMapper.getMappingProcessor(DozerBeanMapper.java:136)
at org.dozer.DozerBeanMapper.map(DozerBeanMapper.java:92)
at org.apache.camel.converter.dozer.DozerTypeConverter.convertTo(DozerTypeConverter.java:46)
at org.apache.camel.converter.dozer.DozerTypeConverter.convertTo(DozerTypeConverter.java:50)
at org.apache.camel.impl.converter.DefaultTypeConverter.doConvertTo(DefaultTypeConverter.java:181)
at org.apache.camel.impl.converter.DefaultTypeConverter.mandatoryConvertTo(DefaultTypeConverter.java:136)
{code}
> 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
>
> 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.
[jira] Commented: (CAMEL-3143)
OsgiDefaultCamelContext.getTypeConverterRegistry() returns null
Posted by "Claus Ibsen (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/activemq/browse/CAMEL-3143?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=61987#action_61987 ]
Claus Ibsen commented on CAMEL-3143:
------------------------------------
Looking into the source code of Dozer its really not well designed for 3rd party to influence loading of resources, overriding classes or hooking into custom logic.
> 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
>
> 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.
[jira] Resolved: (CAMEL-3143)
OsgiDefaultCamelContext.getTypeConverterRegistry() returns null
Posted by "Claus Ibsen (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/activemq/browse/CAMEL-3143?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Claus Ibsen resolved CAMEL-3143.
--------------------------------
Fix Version/s: 2.5.0
Resolution: Fixed
Fixed the OSGi type converter stuff.
trunk: 999836.
But Dozer is still not working in OSGi when loading the mapping files from classpath. Or can you get it working?
> 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.
[jira] Commented: (CAMEL-3143)
OsgiDefaultCamelContext.getTypeConverterRegistry() returns null
Posted by "Claes Redestad (JIRA)" <ji...@apache.org>.
[ 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.