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