I think I can confirm that this is the problem.  We ran into this same 
issue when using the RE client in Fuse (also an OSGi environment).  It 
is not possible to export META-INF/* resources in an OSGi bundle.  This 
makes java ServiceLoader useless as a dynamic service discovery 
mechanism.  As a workaround we had to add the RE client's Providers spec 
file to our own WAR:

https://github.com/Governance/s-ramp/tree/master/s-ramp-ui/s-ramp-ui-war-fuse61/src/main/resources/META-INF/services

It's not ideal, but it's the only way we could get it working without 
modifying RE to support OSGi.

For the record, the latter wouldn't be too hard - but would likely 
require that RE look for providers in both 
META-INF/services/javax.ws.rs.ext.Providers as well as the OSGi Service 
Registry.

-Eric

On 5/23/2014 10:57 AM, Bill Burke wrote:
> I know nothing about OSGi.
>
> My guess is that Resteasy automatic provider lookup is not working.  The
> way it works is that it does a
> Classloader.getResources("META-INF/javax.ws.rs.ext.Providers") and
> iterates througha nd loads all those files.  Those files contain Java
> class names which represent the providers.
>
> On 5/23/2014 9:26 AM, Rohrberg, Timo wrote:
>> 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
>>
>

------------------------------------------------------------------------------
The best possible search technologies are now affordable for all companies.
Download your FREE open source Enterprise Search Engine today!
Our experts will assist you in its installation for $59/mo, no commitment.
Test it for FREE on our Cloud platform anytime!
http://pubads.g.doubleclick.net/gampad/clk?id=145328191&iu=/4140/ostg.clktrk
_______________________________________________
Resteasy-users mailing list
Resteasy-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/resteasy-users

Reply via email to