Hi all,

I must use CXF (client) within a RCP (eclipse) application. Here's my config:
- I have defined a plugin project that contains a library with the code that 
makes the CXF call (actually uses WebClient). This bundle A imports 
org.apache.cxf.bundle-minimal (Require-bundle) and specifies the library in the 
Classpath header of the MANIFEST.
- My OSGi runtime contains servicemix's jsr311 bundle, and this bundle is the 
only provider of javax.ws.rs.*
- I'm using Gemini blueprint to expose the service defined in the library of 
bundle A
- Bundle B (ui bundle) imports service defined in bundle A, also using Gemini 
blueprint facilities.
- When invoking the service from B, it tries to create a WebClient to issue a 
http request, and I get the following error:

Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: 
com.sun.ws.rs.ext.RuntimeDelegateImpl
       at javax.ws.rs.ext.RuntimeDelegate.findDelegate(RuntimeDelegate.java:122)
       at javax.ws.rs.ext.RuntimeDelegate.getInstance(RuntimeDelegate.java:91)
       at javax.ws.rs.core.UriBuilder.newInstance(UriBuilder.java:69)
       at javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:80)
       at 
org.apache.cxf.jaxrs.client.LocalClientState.<init>(LocalClientState.java:47)
       at 
org.apache.cxf.jaxrs.client.AbstractClient.<init>(AbstractClient.java:96)
       at org.apache.cxf.jaxrs.client.WebClient.<init>(WebClient.java:76)
       at org.apache.cxf.jaxrs.client.WebClient.<init>(WebClient.java:72)
       at 
org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean.createWebClient(JAXRSClientFactoryBean.java:197)
       at 
org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean.createWebClient(JAXRSClientFactoryBean.java:206)
       at org.apache.cxf.jaxrs.client.WebClient.create(WebClient.java:142)
       at org.apache.cxf.jaxrs.client.WebClient.create(WebClient.java:115)
       ... 43 more
Caused by: java.lang.ClassNotFoundException: 
com.sun.ws.rs.ext.RuntimeDelegateImpl
       at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
       at java.security.AccessController.doPrivileged(Native Method)
       at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
       at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
       at 
org.eclipse.core.runtime.internal.adaptor.ContextFinder.loadClass(ContextFinder.java:131)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
       at javax.ws.rs.ext.FactoryFinder.newInstance(FactoryFinder.java:37)
       at javax.ws.rs.ext.FactoryFinder.find(FactoryFinder.java:143)
       at javax.ws.rs.ext.RuntimeDelegate.findDelegate(RuntimeDelegate.java:105)
       ... 54 more

Based on what I know from FactoryFinder, it tries to load a file named 
META-INF/services/javax.ws.rs.ext.RuntimeDelegate, that contains the 
implementation class name of the RuntimeDelegate to use. If either the file or 
the class defined in the file cannot be loaded, it tries to load the default 
RuntimeDelegate implementation, which is com.sun.ws.rs.ext.RuntimeDelegateImpl. 
Thus getting this exception.

org.apache.cxf.bundle-minimal contains a file named 
META-INF/services/javax.ws.rs.ext.RuntimeDelegate, and this file contains a 
class name that exists in cxf bundle, thus I rather suspect some classloading 
issues related to bundles since CXF and servicemix jsr311 are in separate 
bundles.

Did anybody already face such an issue ?
Thanks in advance,
--
Gaëtan

Reply via email to