Hello everybody,
I am currently trying to use the RESTEasy client framework within an OSGi
environment (Eclipse Equinox). To provide the required dependencies, I created
a separate Eclipse Plug-In containing the required JAR libraries and exporting
the contained packages to downstream bundles. Then, I am using the RESTEasy
client framework as follows within my main bundle which includes the before
mentioned bundle as required bundle:
ResteasyClient client = new ResteasyClientBuilder().build();
ResteasyWebTarget target = client
.target(
"http://192.168.100.181:5952/RXT_RESTWebService-2.1/jobtemplates/Vitaphone 300
BT/386340" );
RxtDevice device = target.request().get( RxtDevice.class );
System.out.println( device.getId() );
Unfortunately, I always get the following error:
javax.ws.rs.client.ResponseProcessingException:
javax.ws.rs.ProcessingException: Unable to find a MessageBodyReader of
content-type application/xml and type class
com.vitasystems.remosxt.rest.client.model.RxtDevice
at
org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.extractResult(ClientInvocation.java:140)
at
org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.invoke(ClientInvocation.java:444)
at
org.jboss.resteasy.client.jaxrs.internal.ClientInvocationBuilder.get(ClientInvocationBuilder.java:165)
at
de.vitasystems.example.resteasy.client.Activator.start(Activator.java:25)
at
org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
at java.security.AccessController.doPrivileged(Native Method)
at
org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
at
org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
at
org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
at
org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:390)
at
org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1176)
at
org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559)
at
org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544)
at
org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457)
at
org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
at
org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438)
at
org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1)
at
org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
at
org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
Caused by: javax.ws.rs.ProcessingException: Unable to find a MessageBodyReader
of content-type application/xml and type class
com.vitasystems.remosxt.rest.client.model.RxtDevice
at
org.jboss.resteasy.core.interception.ClientReaderInterceptorContext.throwReaderNotFound(ClientReaderInterceptorContext.java:39)
at
org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.getReader(AbstractReaderInterceptorContext.java:73)
at
org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:50)
at
org.jboss.resteasy.plugins.interceptors.encoding.GZIPDecodingInterceptor.aroundReadFrom(GZIPDecodingInterceptor.java:59)
at
org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:53)
at
org.jboss.resteasy.client.jaxrs.internal.ClientResponse.readFrom(ClientResponse.java:245)
at
org.jboss.resteasy.client.jaxrs.internal.ClientResponse.readEntity(ClientResponse.java:179)
at
org.jboss.resteasy.specimpl.BuiltResponse.readEntity(BuiltResponse.java:211)
at
org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.extractResult(ClientInvocation.java:104)
... 18 more
By debugging the included libraries, I tracked the problem down to the
following location:
ResteasyProviderFactory.java
protected <T> MessageBodyReader<T> resolveMessageBodyReader(Class<T> type, Type
genericType, Annotation[] annotations, MediaType mediaType,
MediaTypeMap<SortedKey<MessageBodyReader>> availableReaders)
{
List<SortedKey<MessageBodyReader>> readers =
availableReaders.getPossible(mediaType, type);
//logger.info("******** getMessageBodyReader *******");
for (SortedKey<MessageBodyReader> reader : readers)
{
//logger.info(" matching reader: " + reader.getClass().getName());
if (reader.obj.isReadable(type, genericType, annotations, mediaType))
{
return (MessageBodyReader<T>) reader.obj;
}
}
return null;
}
The problem is a little weired: The readers list of MessageBodyReader instances
contains the
org.jboss.resteasy.plugins.providers.jaxb.JAXBXmlRootElementProvider, but the
reader.obj.isReadable() method returns false for that reader.
In another setup as a plain Maven project outside of the OSGi world, the the
referred method reader.obj.isReadable() returns true and the same piece of code
works.
I am at the end of my knowledge... Do you guys have any hints?
Best regards,
Timo Rohrberg
________________________________
Hinweis: Diese Email enth?lt evtl. vertrauliche und rechtlich gesch?tzte
Informationen. Sollten Sie nicht der richtige Adressat sein oder diese
Email irrt?mlich erhalten haben, informieren Sie bitte sofort den Absender,
und l?schen Sie anschlie?end diese E-Mail. Das unerlaubte Kopieren sowie
die unbefugte Weitergabe des Inhalts dieser Email sind nicht gestattet.
Attention: This e-mail may contain confidential and/or privileged
information. If you are not the intended recipient or if you have received
this e-mail in error, please notify the sender immediately and delete this
e-mail. Any unauthorized copying, disclosure or distribution of the
contents of this e-mail is strictly prohibited.
------------------------------------------------------------------------------
"Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE
Instantly run your Selenium tests across 300+ browser/OS combos.
Get unparalleled scalability from the best Selenium testing platform available
Simple to use. Nothing to install. Get started now for free."
http://p.sf.net/sfu/SauceLabs
_______________________________________________
Resteasy-users mailing list
Resteasy-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/resteasy-users