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.