users@jersey.java.net

Re: application/json programming model

From: Jakub Podlesak <Jakub.Podlesak_at_Sun.COM>
Date: Fri, 31 Aug 2007 17:48:17 +0200

Hi Arun,

please look at the sample linked from:
http://blogs.sun.com/japod/entry/json_representation_of_jaxb_object

~Jakub

On Fri, Aug 31, 2007 at 08:13:36AM -0700, Arun Gupta wrote:
> >What you need to do is to create a JAXB bean with @XmlRootElement on the
> >class. Write a JAX-RS bean with a method that returns the JAXB bean and
> >is annotated with @ProduceMime("application/json") something like:
> >
> >@XmlRootElement
> >public class States {
> > ...
> >}
> >
> >@UriTemplate("states")
> >public class StatesResource {
> >
> > @HttpMethod
> > @ProduceMime("application/json")
> > States getStates() {
> > ...
> > }
> >}
> >
> >The JAXB provider will automagically convert the returned States class
> >instance into JSON for you.
> This is reasonable. I tried it exactly this way without looking at the
> sample and got an empty response.
>
> >I'm sure Jakub's example will show this in
> >more detail.
>
> This sample is not configured to run by default:
>
> -- cut here --
> init:
> deps-jar:
> Processing resource classes
> compile:
> run:
> Exception in thread "main" java.lang.IllegalArgumentException
> at com.sun.ws.rest.samples.storageservice.Main.main(Main.java:85)
> Java Result: 1
> BUILD SUCCESSFUL (total time: 4 seconds)
> -- cut here --
>
> A default command-line argument is missing.
>
> -Arun
> >
> >Marc.
> >
> >>>>use. You might not be able to get the exact JSON format you show
> >>>>below but I'd bet you could get close just using some of the JAXB
> >>>>annotations.
> >>>>
> >>>>Marc.
> >>>>
> >>>>On Aug 30, 2007, at 2:33 PM, Arun Gupta wrote:
> >>>>
> >>>>>In order to return a JSON array like:
> >>>>>
> >>>>>[{"name":"California","value":"California"},{"name":"New
> >>>>>York","value":"New York"},{"name":"Alabama" ,"value":"Alabama"},
> >>>>>{"name":"Texas","value":"Texas"}]
> >>>>>
> >>>>>I have to write the following code:
> >>>>>
> >>>>>-- cut here --
> >>>>> @HttpMethod("GET")
> >>>>> @ProduceMime("application/json")
> >>>>> public JSONArray getMessage() throws JSONException {
> >>>>> String[] states = { "California", "New York", "Alabama",
> >>>>>"Texas"};
> >>>>> JSONArray array = new JSONArray();
> >>>>> for (String s : states) {
> >>>>> JSONObject item = new JSONObject();
> >>>>> item.put("name", s).put("value", s);
> >>>>> array.put(item);
> >>>>> }
> >>>>>
> >>>>> return array;
> >>>>> }
> >>>>>-- cut here --
> >>>>>
> >>>>>I think this is too involving and low-level. Can the code be
> >>>>>something like the following ?
> >>>>>
> >>>>>-- cut here --
> >>>>>@JSONObject
> >>>>>ItemBean {
> >>>>> ItemBean(String name, String value) { ... }
> >>>>>
> >>>>> @JSONObjectKey
> >>>>> public String getName() { ... }
> >>>>>
> >>>>> @JSONObjectValue("value")
> >>>>> public String getNameValue() { ... }
> >>>>>}
> >>>>>
> >>>>> @HttpMethod("GET")
> >>>>> @ProduceMime("application/json")
> >>>>> public List<ItemBean> getMessage() {
> >>>>> String[] states = { "California", "New York", "Alabama",
> >>>>>"Texas"};
> >>>>> List<ItemBean> list = new ArrayList<ItemBean>();
> >>>>> for (String s : states) {
> >>>>> ItemBean bean = new ItemBean(s, s);
> >>>>> list.add(bean);
> >>>>> }
> >>>>>
> >>>>> return list;
> >>>>> }
> >>>>>-- cut here --
> >>>>>
> >>>>>This will require defining new annotations JSONObject,
> >>>>>JSONObjectKey & JSONObjectValue. I think this is more natural to a
> >>>>>Java developer.
> >>>>>
> >>>>>-Arun
> >>>>>--
> >>>>>Web Technologies and Standards
> >>>>>Sun Microsystems, Inc.
> >>>>>Blog: http://blogs.sun.com/arungupta
> >>>>>
> >>>>>---------------------------------------------------------------------
> >>>>>To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> >>>>>For additional commands, e-mail: users-help_at_jersey.dev.java.net
> >>>>>
> >>>>---
> >>>>Marc Hadley <marc.hadley at sun.com>
> >>>>CTO Office, Sun Microsystems.
> >>>>
> >>>>
> >>>>---------------------------------------------------------------------
> >>>>To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> >>>>For additional commands, e-mail: users-help_at_jersey.dev.java.net
> >>>>
> >>>---------------------------------------------------------------------
> >>>To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> >>>For additional commands, e-mail: users-help_at_jersey.dev.java.net
> >>
> >>--
> >>Web Technologies and Standards
> >>Sun Microsystems, Inc.
> >>Blog: http://blogs.sun.com/arungupta
> >>
> >>---------------------------------------------------------------------
> >>To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> >>For additional commands, e-mail: users-help_at_jersey.dev.java.net
> >>
> >
> >---
> >Marc Hadley <marc.hadley at sun.com>
> >CTO Office, Sun Microsystems.
> >
> >
> >---------------------------------------------------------------------
> >To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> >For additional commands, e-mail: users-help_at_jersey.dev.java.net
> >
>
> --
> Web Technologies and Standards
> Sun Microsystems, Inc.
> Blog: http://blogs.sun.com/arungupta
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>