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

Reply via email to