Konrad Windszus created CXF-4686:
------------------------------------
Summary: NoClassDefFoundError for javax.ws.rs.core.MediaType in
OSGi environment
Key: CXF-4686
URL: https://issues.apache.org/jira/browse/CXF-4686
Project: CXF
Issue Type: Bug
Components: JAX-RS
Affects Versions: 2.6.2
Environment: Apache Felix
Reporter: Konrad Windszus
I try to create a JAX-RS client from bundle a with the help of an annotated
class like
{code}
// Jax-RS client
ProductClientProxy productProxy = JAXRSClientFactory.create(<url>,
ProductClientProxy.class);
{code}
CXF and JAX-RS are both exposed from another bundle (bundle b). The problem is
during runtime I get the following exception
{noformat}
java.lang.NoClassDefFoundError: javax.ws.rs.core.MediaType not found by <bundle
a> [368]
at $Proxy205.<clinit>(Unknown Source)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.reflect.Proxy.newProxyInstance(Proxy.java:588)
at
org.apache.cxf.common.util.ProxyHelper.getProxyInternal(ProxyHelper.java:45)
at org.apache.cxf.common.util.ProxyHelper.getProxy(ProxyHelper.java:50)
at
org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean.createWithValues(JAXRSClientFactoryBean.java:302)
at
org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean.create(JAXRSClientFactoryBean.java:243)
at
org.apache.cxf.jaxrs.client.JAXRSClientFactory.create(JAXRSClientFactory.java:86)
at
org.apache.cxf.jaxrs.client.JAXRSClientFactory.create(JAXRSClientFactory.java:72)
at
org.apache.cxf.jaxrs.client.JAXRSClientFactory.create(JAXRSClientFactory.java:49)
at <code line listed above>
{noformat}
The problem is that CXF tries to instanciate a Client in JAXRSClientFactoryBean
(line 302, leveraging the classloader of the client bundle (bundle a), not with
the classloader of the CXF bundle(bundle b)). Unfortunately the classloader of
the bundle a does not import the package javax.ws.rs.core, and therefore this
NoClassDefFoundError is thrown.
As a workaround we explicitly import the package javax.ws.rs.core in bundle a.
Although I don't know how to fix it from your site, it would be great if the
necessary packages would automatically detected (in this case by the
maven-bundle-plugin) or you use another classloader to load the
org.apache.cxf.jaxrs.client.Client interface, or you remove all the
dependencies on other packages from the Client interface.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira