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:[email protected]]
Sent: Tuesday, December 01, 2009 3:59 PM
To: [email protected]
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:[email protected]]
>>> Sent: Tuesday, December 01, 2009 3:07 PM
>>> To: [email protected]
>>> 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:[email protected]]
>>> >> Sent: Tuesday, December 01, 2009 2:44 PM
>>> >> To: [email protected]
>>> >> 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.