Hi

Please see comments with S.B.

----- Original Message ----- From: "Daniel Bimschas" <[email protected]>
To: <[email protected]>
Sent: Friday, February 05, 2010 2:16 PM
Subject: Re: DOSGi and JSON responses


Ah, damnit. I forgot to mention that I took out my self-written JSONProvider extending class in order to be sure that doing this doesn't get in the way of something. Therefore, Import-Package doesn't contain "org.apache.cxf.jaxrs.provider.*" but that should be okay.

S.B You do not need to extend the CXF provider to the Import-Package including "org.apache.cxf.jaxrs.provider.*", can you make sure please it is explicitly imported ? I'm not sure how you build your own bundle but there's usually a way to provide the Import-Package at build time - but if it is cumbersome to do for some reasons then indeed, just have a custom provider extending the cxf one and doing nothing else but indirectly ensuring Import-Package contains the right value...Otherwise i won't work, given that DOSGi uses the bundle activator of the custom bundle to load the providers. That said, I'll update the CXF JAXRS handler to try the dswContext (which is CXF aware) when the loading exception occur...


I investigated further. If I use the following properties in my DS component:

<property name="service.exported.interfaces" type="String" value="*"/>
<property name="service.exported.configs" type="String" 
value="org.apache.cxf.rs"/>
<property name="service.exported.intents" type="String" value="HTTP"/>
<property name="org.apache.cxf.rs.address" type="String" 
value="http://localhost:8081/verzeichnis/"/>
<property name="org.apache.cxf.rs.databinding" type="String" value="jaxb"/>

there are no exceptions (but also no JSON support).

S.B> : It is either "org.apache.cxf.rs.databinding" or "org.apache.cxf.rs.provider", otherwise what to do if the former declares jaxb and the latter declares some other XML aware provider ? Also there's no need to specify JAXBElementProvider (JAXB is supported OTB), only of you need to configure it somehow...

Using the following properties

<property name="service.exported.interfaces" type="String" value="*"/>
<property name="service.exported.configs" type="String" 
value="org.apache.cxf.rs"/>
<property name="service.exported.intents" type="String" value="HTTP"/>
<property name="org.apache.cxf.rs.address" type="String" 
value="http://localhost:8081/verzeichnis/"/>
<property name="org.apache.cxf.rs.provider" type="String">
  org.apache.cxf.jaxrs.provider.JAXBElementProvider
  org.apache.cxf.jaxrs.provider.JSONProvider
</property>

I get the CNFEs mentioned before.

S.B : please update Import-Package in your bundle

Changing the "org.apache.cxf.rs.address" property to "org.apache.cxf.rs.httpservice.context" as you proposed before doesn't change anything too (but that seems just logically).

The strange thing is that I only get those exceptions when the bundle starts up. The applications runs fine nevertheless and when I do HTTP requests there are no more exceptions.

except that LinkageError ?

cheers, Sergey

Is this maybe a fallback to the default "jaxb" that could lead to this 
behaviour?

cheers,
Daniel



Am 05.02.2010 um 14:45 schrieb Sergey Beryozkin:

I'm wondering, is the problem here to do with the fact that DOSGI is trying to use the BundelContext/Bundle of the application bundle to load the providers ? It should work if the providers's code is indeed inside a given app bundle but looks like it causes issues if the provider's code is actually located elsewhere.

That said, if you own bundle imports the org.apache.cxf.jaxrs.provider.* then surely the OSGI loader has to be capable to find the classes available elsewhere in the container, especially given that CXF minimal bundle is exporting org.apache.cxf.jaxrs.provider ?

Can you please check that your own bundle Import-Packag(es) the 
org.apache.cxf.jaxrs.provider.* ?

thanks, Sergey

----- Original Message ----- From: "Daniel Bimschas" 
<[email protected]>
To: <[email protected]>
Sent: Friday, February 05, 2010 1:34 PM
Subject: Re: DOSGi and JSON responses


Maybe the full debugging output including stack trace can help more:

INFO: Creating a de.uniluebeck.itm.soapraktikum.ws0910.persons.vz.rest.PersonResource endpoint from CXF PublishHook, address is http://localhost:8081/verzeichnis/
java.lang.ClassNotFoundException: 
org.apache.cxf.jaxrs.provider.JAXBElementProvider
at 
org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:744)
at org.apache.felix.framework.ModuleImpl.access$100(ModuleImpl.java:61)
at 
org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1656)
at java.lang.ClassLoader.loadClass(ClassLoader.java:250)
at 
org.apache.felix.framework.ModuleImpl.getClassByDelegation(ModuleImpl.java:604)
at org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1487)
at org.apache.felix.framework.BundleImpl.loadClass(BundleImpl.java:897)
at 
org.apache.cxf.dosgi.dsw.handlers.JaxRSUtils.loadProviders(JaxRSUtils.java:112)
at org.apache.cxf.dosgi.dsw.handlers.JaxRSUtils.getProviders(JaxRSUtils.java:67)
at 
org.apache.cxf.dosgi.dsw.handlers.JaxRSPojoConfigurationTypeHandler.createServer(JaxRSPojoConfigurationTypeHandler.java:119)
at 
org.apache.cxf.dosgi.dsw.hooks.ServiceHookUtils.createServer(ServiceHookUtils.java:86)
at 
org.apache.cxf.dosgi.dsw.hooks.CxfPublishHook.createServer(CxfPublishHook.java:106)
at 
org.apache.cxf.dosgi.dsw.hooks.CxfPublishHook.publishEndpoint(CxfPublishHook.java:80)
at org.apache.cxf.dosgi.dsw.Activator$1.run(Activator.java:164)
at 
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:637)
05.02.2010 14:32:16 org.apache.cxf.dosgi.dsw.handlers.JaxRSUtils loadProviders
WARNUNG: JAXRS Provider org.apache.cxf.jaxrs.provider.JAXBElementProvider can 
not be loaded or created
java.lang.ClassNotFoundException: org.apache.cxf.jaxrs.provider.JSONProvider
at 
org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:744)
at org.apache.felix.framework.ModuleImpl.access$100(ModuleImpl.java:61)
at 
org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1656)
at java.lang.ClassLoader.loadClass(ClassLoader.java:250)
at 
org.apache.felix.framework.ModuleImpl.getClassByDelegation(ModuleImpl.java:604)
at org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1487)
at org.apache.felix.framework.BundleImpl.loadClass(BundleImpl.java:897)
at 
org.apache.cxf.dosgi.dsw.handlers.JaxRSUtils.loadProviders(JaxRSUtils.java:112)
at org.apache.cxf.dosgi.dsw.handlers.JaxRSUtils.getProviders(JaxRSUtils.java:67)
at 
org.apache.cxf.dosgi.dsw.handlers.JaxRSPojoConfigurationTypeHandler.createServer(JaxRSPojoConfigurationTypeHandler.java:119)
at 
org.apache.cxf.dosgi.dsw.hooks.ServiceHookUtils.createServer(ServiceHookUtils.java:86)
at 
org.apache.cxf.dosgi.dsw.hooks.CxfPublishHook.createServer(CxfPublishHook.java:106)
at 
org.apache.cxf.dosgi.dsw.hooks.CxfPublishHook.publishEndpoint(CxfPublishHook.java:80)
at org.apache.cxf.dosgi.dsw.Activator$1.run(Activator.java:164)
at 
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:637)
05.02.2010 14:32:16 org.apache.cxf.dosgi.dsw.handlers.JaxRSUtils loadProviders


Am 05.02.2010 um 14:22 schrieb Daniel Bimschas:

It's Felix over Pax Runner in my case. If I take the "sun.*,com.sun.*,javax.xml.bind,javax.xml.bind.*" packages out of the bootdelegation classpath the following errors will occur:

java.lang.ClassNotFoundException: 
org.apache.cxf.jaxrs.provider.JAXBElementProvider
java.lang.ClassNotFoundException: org.apache.cxf.jaxrs.provider.JSONProvider

For me, currently that doesn't make sense since the DOSGI bundle is fully resolved and all classes should be loadable. I'll further investigate this...

Am 05.02.2010 um 13:29 schrieb Sergey Beryozkin:

S.B : Is it a single bundle distro ? Yes, it ships the stax api bundle I think...Hmm...Will it work if you try the multibundle distro and omit the stax-api bundle ? Or perhaps updating the Equinox config to block the stax api from the system ?

--
M.Sc. Daniel Bimschas
Institute of Telematics, University of Lübeck
http://www.itm.uni-luebeck.de/users/bimschas
Ratzeburger Allee 160, 23538 Lübeck, Germany
Phone: +49 451 500 5389


--
M.Sc. Daniel Bimschas
Institute of Telematics, University of Lübeck
http://www.itm.uni-luebeck.de/users/bimschas
Ratzeburger Allee 160, 23538 Lübeck, Germany
Phone: +49 451 500 5389



--
M.Sc. Daniel Bimschas
Institute of Telematics, University of Lübeck
http://www.itm.uni-luebeck.de/users/bimschas
Ratzeburger Allee 160, 23538 Lübeck, Germany
Phone: +49 451 500 5389


Reply via email to