cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From cgswtsu78 <cg...@proofpoint.com>
Subject Re: How to use CXF and JSON
Date Wed, 02 Dec 2009 18:17:16 GMT

That did work, but it required me to save the json string as a file.  When
opening it in notepad it has the correct object representation.  How can I
display the json string in the browser? Do I have to setup something prior
to making the request to the service method?  Currently, I'm just executing
a GET request by pasting in a url in IE.  



Sergey Beryozkin-2 wrote:
> 
> Hi
> 
> You probably just don't need to do it all, just do
> 
> @Produces(application/xml, application/json)
> @GET
> public SomeConcreteObjectType get(...) {
>     return topSpamSenderService.getTopSpamSender(null);
> }
> 
> hope it helps
> 
> Sergey
> 
>> 
>> Hi Sergey, 
>> 
>> I don't quite understand the proper implementation for using CXF and
>> JSON. 
>> I have the xml implementation working, see below.  Can you guide me on
>> doing
>> the same basic function but returning JSON?  I know I need to change the
>> @Produces to "application/json", but what setup do I need to do in order
>> to
>> return the json string representing the Object "o" to the browser or
>> consumer of the service?  Thanks for the help!
>> 
>> 
>> xml version:
>> 
>> import javax.ws.rs.GET;
>> import javax.ws.rs.POST;
>> import javax.ws.rs.Path;
>> import javax.ws.rs.Produces;
>> import javax.ws.rs.core.Response;
>> public class XMLExample{
>>        @GET 
>> @Path("/getTopSpamSender")
>> @Produces("application/xml")
>> public Response retrieveTopSpamSenderData() throws Exception { 
>> 
>> Response httpresp;
>> String httpbody; 
>> httpresp=null;
>> 
>> Object o = topSpamSenderService.getTopSpamSender(null);
>> 
>> if (o != null)
>> {
>> 
>> httpbody = JaxbUtils.ObjToXmlStr(o, false);
>> httpresp = setupResponse(Response.ok(httpbody)).build(); 
>> }
>> else 
>> httpresp = setupResponse(Response.noContent()).build(); 
>> 
>> 
>> 
>> return httpresp;
>> 
>> }
>> }
>> 
>> public static String ObjToXmlStr(Object obj, boolean includeXmlVerHdr)
>> {
>> try
>> {
>> StringWriter sw = new StringWriter();
>> JAXBContext jaxbctx = JAXBContext.newInstance(obj.getClass());
>> Marshaller marshaller = jaxbctx.createMarshaller();
>> marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
>> marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
>> 
>> marshaller.marshal(obj, sw);
>> 
>> if (!includeXmlVerHdr)
>> {
>> String str = sw.toString();
>> int beginIndex = str.toString().indexOf(">");
>> 
>> return str.substring(beginIndex + 2);
>> }
>> 
>> return sw.toString();
>> 
>> } catch (Exception e)
>> {
>> log.error("Failed to create XML from Object", e);
>> }
>> 
>> return null;
>> }
>> 
>> 
>> Sergey Beryozkin-2 wrote:
>>> 
>>> Thanks David...
>>> 
>>> Looks like the problem has to do with that fact that an Object instance
>>> is
>>> being returned....
>>> The method.getReturnType() is used when searching for providers...
>>> 
>>> cheers, Sergey
>>> 
>>> 
>>> 
>>>> -----Original Message-----
>>>> From: cgswtsu78 [mailto:cgray@proofpoint.com]
>>>> Sent: Tuesday, December 01, 2009 3:59 PM
>>>> To: users@cxf.apache.org
>>>> Subject: RE: How to use CXF and JSON
>>>> 
>>>> 
>>>> When I do the below I get the below exception.  EnvFromHourlyWrapper
>>> is
>>>> my
>>>> wrapper object that holds a List of the objects that I want to return.
>>> 
>>> I believe if you Google for "JAXRSOutInterceptor
>>> writeResponseErrorMessage WARNING: No message body writer has been found
>>> for response class", you'll find an explanation of this.
>>> 
>>>> cgswtsu78 wrote:
>>>> >
>>>> > So the below will return the json representation of the Object o?
>>> No
>>>> > other setup is needed?  Thanks for the quick responses!
>>>> >
>>>> >
>>>> >         @GET
>>>> > @Path("/topspamsenderjson")
>>>> > @Produces("application/json")
>>>> > public Object getTopSpamSenderData() throws Exception
>>>> > {
>>>> > Object o = topSpamSenderService.getTopSpamSender();
>>>> >
>>>> > return o;
>>>> > }
>>>> >
>>>> >
>>>> >
>>>> > KARR, DAVID (ATTCINW) wrote:
>>>> >>
>>>> >>> -----Original Message-----
>>>> >>> From: cgswtsu78 [mailto:cgray@proofpoint.com]
>>>> >>> Sent: Tuesday, December 01, 2009 3:07 PM
>>>> >>> To: users@cxf.apache.org
>>>> >>> Subject: RE: How to use CXF and JSON
>>>> >>>
>>>> >>>
>>>> >>> Ok, I've made that switch, but I'm still confused as how I need
to
>>>> >>> setup the
>>>> >>> javax.ws.rs.core.Response.  How would I take an Object and convert
>>>> it
>>>> >>> into a
>>>> >>> json string?  Below is the xml sample I created, any suggestions
>>> on
>>>> >>> converting this to a json implementation would be greatly
>>>> appreciated.
>>>> >>
>>>> >> I wondered what you were talking about in your previous note.
>>>> >> Typically, you don't do anything to format the response except for
>>>> >> returning the object from the method.  The container does the work
>>>> of
>>>> >> formatting the response in either XML or JSON.  Most of this code
>>>> you've
>>>> >> written wasn't necessary.  You can modify the formatting of the
>>>> response
>>>> >> with "@Xml..." annotations (which also can affect the JSON output),
>>>> but
>>>> >> mostly you just let the container do the work.
>>>> >>
>>>> >>> KARR, DAVID (ATTCINW) wrote:
>>>> >>> >
>>>> >>> >> -----Original Message-----
>>>> >>> >> From: cgswtsu78 [mailto:cgray@proofpoint.com]
>>>> >>> >> Sent: Tuesday, December 01, 2009 2:44 PM
>>>> >>> >> To: users@cxf.apache.org
>>>> >>> >> Subject: How to use CXF and JSON
>>>> >>> >>
>>>> >>> >>
>>>> >>> >> Hello,
>>>> >>> >>
>>>> >>> >> I'm very new to building RESTful webservices using
apache cxf
>>>> and I
>>>> >>> >> currently have a small sample that returns a
>>>> >>> javax.ws.rs.core.Response
>>>> >>> >> in
>>>> >>> >> xml format using the @ProduceMime("application/xml").
 My
>>>> question
>>>> >>> is
>>>> >>> >> how do
>>>> >>> >> I return a javax.ws.rs.core.Response in JSON format?
 I've
>>> tried
>>>> >>> using
>>>> >>> >> @ProduceMime("text/json"), @ProduceMime("application/json").
>>>> I'm
>>>> >>> > using
>>>> >>> >> JAXB
>>>> >>> >> to convert the object to xml and then rebuilding the
response,
>>>> but
>>>> >>> I'm
>>>> >>> >> not
>>>> >>> >> sure how to rebuild the response when I return json.
 Is this
>>>> >>> possible
>>>> >>> >> with
>>>> >>> >> CXF?
>>>> >>> >
>>>> >>> > The "old" "@ProduceMime" annotation has been replaced with
>>>> >>> "@Produces".
>>>> >>> >
>>>> >>> > The following will make a method produce either XML or
JSON,
>>>> >>> depending
>>>> >>> > on the Accept header value:
>>>> >>> >
>>>> >>> > @Produces({"application/xml", "application/json"})
>>>> >>> >
>>>> >>> >
>>>> >>>
>>>> >>> --
>>>> >>> View this message in context:
>>>> >> http://old.nabble.com/How-to-use-CXF-and-
>>>> >>> JSON-tp26600386p26600710.html
>>>> >>> Sent from the cxf-user mailing list archive at Nabble.com.
>>>> >>
>>>> >>
>>>> >>
>>>> >
>>>> >
>>>> 
>>>> --
>>>> View this message in context:
>>> http://old.nabble.com/How-to-use-CXF-and-
>>>> JSON-tp26600386p26601041.html
>>>> Sent from the cxf-user mailing list archive at Nabble.com.
>>> 
>>> 
>>> 
>> 
>> -- 
>> View this message in context:
>> http://old.nabble.com/How-to-use-CXF-and-JSON-tp26600386p26612855.html
>> Sent from the cxf-user mailing list archive at Nabble.com.
>>
> 
> 

-- 
View this message in context: http://old.nabble.com/How-to-use-CXF-and-JSON-tp26600386p26613741.html
Sent from the cxf-user mailing list archive at Nabble.com.


Mime
View raw message