[ 
https://issues.apache.org/jira/browse/SLING-2192?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14987169#comment-14987169
 ] 

Mike Rose commented on SLING-2192:
----------------------------------

I recently did this myself for a project. Let's just say it is "non-trivial". I 
will share a few notes here based on my experience.

- I assembled a bundle that exports all the packages necessary to implement 
jax-rs 2.0 apis in any other bundles by importing the provided packages 
provided by my jax-rs bundle. This turned out to be a pretty good strategy. It 
kept the overall bundle bloat to a minimum and made implementing any number of 
bundles that each provided their own APIs fairly simple.

- One challenge that I had to overcome is that the Sling Models API / Impl 
bundles have a bit of sloppiness in their manifests and export the 
javax.annotation package without specifying any version constraints. This 
caused a conflict when trying to supply the newer versions of that package and 
its sub-packages required by Jersey and Jackson. In the end, I had to build my 
own custom versions of org.apache.sling.models.api and 
org.apache.sling.models.impl as well as build my own custom launchpad that 
replaced the default versions of those bundles in order workaround the package 
conflicts. (should I file an issue about cleaning that up?)

-  I really did not like the approach taken by Caravan JAX-RS Publisher and 
OSGi JAX-RS Connector. They want you to overload OSGi services and expose them 
as JAX-RS resources which seems to violate the "single purpose per component" 
and KISS principles. They also don't seem to allow you to group your resources 
together in a ResourceConfig, making it hard to keep related resources grouped 
into a common path in their URIs or register any custom Providers. Instead, I 
implemented this so that I could deploy my APIs as I would in any other 
container and inject other services (OSGi or otherwise) into my JAX-RS resource 
classes. I can easily inject a resource resolver and/or resources adapted to 
pojos with Jackson annotations in order to serve up any sort of content.

If anyone else thinks that they might find this useful I would be happy to 
share my implementation. Just drop me a line...

  

> Support JAX-RS resource classes
> -------------------------------
>
>                 Key: SLING-2192
>                 URL: https://issues.apache.org/jira/browse/SLING-2192
>             Project: Sling
>          Issue Type: New Feature
>            Reporter: Reto Gmür
>         Attachments: SLING-2192-20110310.patch, SLING-2192-20111004.patch, 
> SLING-2192-20111013.patch, SLING-2192-new-jax-rs-bundle.patch, 
> SLING-2192-new-jax-rs-bundle.patch, 
> SLING-2192-with-sling-style-style-registration.patch, 
> SLING-2192-with-tests.patch, jaxrs-in-contrib.patch, slingr-on-wink-osgi.patch
>
>
> It should be possible to register jax resource classes and providers as 
> services. As they don't implement a specific interface services that expose 
> java.lang.Object should be considered as javx-rs services iff they have the 
> service property "javax.ws.rs" set to true.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to