users@jersey.java.net

Re: application/json programming model

From: Arun Gupta <Arun.Gupta_at_Sun.COM>
Date: Fri, 31 Aug 2007 08:13:36 -0700

> 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