No, not working with OSGI. Just using a standard Web application with Spring. I am using CXF 2.6.0 though, not sure if that should matter.
Note that I did have to manually add the Jettison dependency, and after I did I received an error stating that the context did not know about my class. From there I created the JSONProvider instance with the class identified in jaxbElementsClassName property and was able to get my Web resource to work. -----Original Message----- From: Sergey Beryozkin [mailto:[email protected]] Sent: Tuesday, May 22, 2012 2:25 PM To: [email protected] Subject: Re: JSON for JAX-RS configuration Thanks,indeed the default JSON Provider should manage XMLRootElement annotated classes without any additional configuration. Tom, do you work with OSGI ? Jettison bundle may need to be installed there Cheers, Sergey On 22/05/12 18:37, Shane Saunders wrote: > Tom, > > This is what I setup for a very basic sample project that I created > for our project to use as a starting point for JSON. I think your > setup looks good, but I did not use the JSON Provider parameters that > you have setup. I built this with CXF 2.5.2. It was able to > (un)marshall the JSON correctly for me on the server side and I used a > similar setup for the WebClient class. > > beans.xml: > ... > <jaxrs:server id="myServer" address="/sample"> > <jaxrs:providers> > <ref bean="jsonProvider" /> > </jaxrs:providers> > > <jaxrs:serviceBeans> > <ref bean="myBean" /> > </jaxrs:serviceBeans> > </jaxrs:server> > > <bean id="myBean" > class="com.hp.exstream.sample.SampleRestJsonImpl" /> > > <bean id="jsonProvider" > class="org.apache.cxf.jaxrs.provider.JSONProvider"> > <property name="ignoreNamespaces" value="true" /> > </bean> > ... > > Web Service Interface class: > > @Path("/") > public interface SampleRestJson { > > @POST > @Produces("application/json") > @Consumes("application/json") > @ElementClass(response = ResponseData.class, request = > RequestData.class) > @Path("/request") > public ResponseData request1(RequestData req); } > > > RequestData: > > @XmlRootElement > @XmlAccessorType(XmlAccessType.FIELD) > public class RequestData { > > private String stringData; > private int intData; > ... > } > > > ResponseData: > > @XmlRootElement > @XmlAccessorType(XmlAccessType.FIELD) > public class ResponseData { > > private String stringData; > private int intData; > ... > } > > > HTH, > Shane > > > On Tue, May 22, 2012 at 10:49 AM,<[email protected]> wrote: > >> After spending a couple of days trying to get JAXB and JSON working with a >> JAX-RS service I found that the following was required. It wasn't clear to >> me from the documentation or samples that explicit declarations of the JAXB >> objects in the service bean configuration was required. My initial >> assumption was that there was a default JSONProvider instance that didn't >> require configuration, and that any object with the @XmlRootElement >> annotation could be marshaled. >> >> The following is the correct method for configuring a JAX-RS service using >> JSON as the communication protocol? >> >> Web resource interface: >> @Path("users") >> public interface RestUserService { >> >> @GET >> @Path("/{name}") >> @Consumes("application/json") >> @Produces("application/json") >> public Response findUser(@PathParam("name") String name); >> >> @POST >> @Consumes("application/json") >> @Produces("application/json") >> public Response create(User user); >> } >> >> >> Spring bean definition: >> <!-- This provider is required when Web resources are using JSON as >> the protocol --> >> <bean id="jsonProvider" >> class="org.apache.cxf.jaxrs.provider.json.JSONProvider"> >> <property name="singleJaxbContext" value="true" /> >> <property name="jaxbElementClassNames"> >> <list> >> >> <value>com.thomsonreuters.services.userservice._2012_02_01.User</value> >> </list> >> </property> >> </bean> >> >> <jaxrs:server id="restServices" address="/rest"> >> <jaxrs:serviceBeans> >> <ref bean="restUserService" /> >> </jaxrs:serviceBeans> >> >> <jaxrs:providers> >> <ref bean="jsonProvider" /> >> </jaxrs:providers> >> </jaxrs:server> >> >> Tom >> >> >
