users@jersey.java.net

Re: application/json programming model

From: Jakub Podlesak <Jakub.Podlesak_at_Sun.COM>
Date: Wed, 05 Sep 2007 07:39:43 +0200

I am on it.

~Jakub

On Tue, Sep 04, 2007 at 10:30:46PM -0700, Arun Gupta wrote:
> I've attached a zip file that contains a really simple to demonstrate
> usage of JAXB. Steps to follow:
>
> 1). Set jersey.home in build.xml appropriately
> 2). Invoke "ant run"
> 3). Access "http://localhost:9998/helloworld/json2" in browser
>
> The returned JSON is empty.
>
> What am I missing ?
>
> -Arun
>
> Arun Gupta wrote:
> >After removing the private directory, I'm getting the following error
> >during build time:
> >
> >-- cut here --
> >Created dir: C:\workarea\samples\JsonFromJaxb\build\web\WEB-INF\classes
> >Processing resource classes
> >Problem encountered during annotation processing;
> >see stacktrace below for more information.
> >java.lang.ClassFormatError: Illegal class modifiers in class
> >com/sun/ws/rest/tools/webapp/writer/package-info: 0x1600
> > at java.lang.ClassLoader.defineClass1(Native Method)
> > at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
> > at java.lang.ClassLoader.defineClass(ClassLoader.java:465)
> > at
> >com.sun.istack.tools.ParallelWorldClassLoader.findClass(ParallelWorldClassLoader.java:90)
> >
> > at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
> > at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
> > at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
> > at java.lang.Class.forName0(Native Method)
> > at java.lang.Class.forName(Class.java:242)
> > at java.lang.Package.getPackageInfo(Package.java:350)
> > at java.lang.Package.getAnnotation(Package.java:361)
> > at com.sun.xml.txw2.TXW.getTagName(TXW.java:60)
> > at com.sun.xml.txw2.TXW.create(TXW.java:83)
> > at
> >com.sun.ws.rest.tools.webapp.writer.WebAppWriter.writeTo(WebAppWriter.java:58)
> >
> > at
> >com.sun.ws.rest.tools.webapp.writer.WebAppWriter.write(WebAppWriter.java:66)
> >
> > at
> >com.sun.ws.rest.tools.annotation.apt.UriTemplateProcessor.process(UriTemplateProcessor.java:214)
> >
> > at
> >com.sun.mirror.apt.AnnotationProcessors$CompositeAnnotationProcessor.process(AnnotationProcessors.java:60)
> >
> > at com.sun.tools.apt.comp.Apt.main(Apt.java:454)
> > at
> >com.sun.tools.apt.main.JavaCompiler.compile(JavaCompiler.java:448)
> > at com.sun.tools.apt.main.Main.compile(Main.java:1075)
> > at com.sun.tools.apt.main.Main.compile(Main.java:938)
> > at com.sun.tools.apt.Main.processing(Main.java:95)
> > at com.sun.tools.apt.Main.process(Main.java:85)
> > at com.sun.tools.apt.Main.process(Main.java:67)
> > at com.sun.ws.rest.tools.RsGenTool.run(RsGenTool.java:36)
> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > at
> >sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> >
> > at
> >sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> >
> > at java.lang.reflect.Method.invoke(Method.java:585)
> > at com.sun.ws.rest.tools.Invoker.invoke(Invoker.java:104)
> > at com.sun.ws.rest.tools.RsGen.main(RsGen.java:31)
> >-- cut here --
> >
> >and
> >
> >-- cut here --
> >Initializing Sun's JavaServer Faces implementation (1.2_04-b20-p03) for
> >context ''
> >"DPL8015: Invalid Deployment Descriptors in Deployment descriptor file
> >WEB-INF/web.xml in archive [web].
> >Line -1 Column -1 -- Premature end of file."
> >"DPL8005: Deployment Descriptor parsing failure : Premature end of file."
> >Exception occured in J2EEC Phaseorg.xml.sax.SAXParseException: Premature
> >end of file.
> >com.sun.enterprise.deployment.backend.IASDeploymentException: Error
> >loading deployment descriptors for module [JsonFromJaxb] Line -1 Column
> >-1 -- Deployment descriptor file WEB-INF/web.xml in archive [web].
> >Premature end of file.
> > at
> >com.sun.enterprise.deployment.backend.Deployer.loadDescriptors(Deployer.java:380)
> >
> > at
> >com.sun.enterprise.deployment.backend.ModuleDeployer.loadDescriptors(ModuleDeployer.java:423)
> >
> > at
> >com.sun.enterprise.deployment.backend.WebModuleDeployer.deploy(WebModuleDeployer.java:157)
> >
> >
> >-- cut here --
> >
> >during runtime.
> >
> >Any idea what might be wrong ?
> >
> >-Arun
> >Jakub Podlesak wrote:
> >>Hi Arun,
> >>
> >>The NetBeans project should use jar files from it's [lib]
> >>subdirectory. I have rewritten the dependencies. (If you look at the
> >>snapshot you will realize
> >>I run it from outside of Jersey dir structure)
> >>
> >>But you right, I forgot to remove [nbproject/private] directory, which
> >>keeps info about the files within my filesystem. It can probably cause
> >>issues.
> >>
> >>Could you please remove the [private] dir and try again?
> >>I will fix the issue and update the project on the web.
> >>
> >>Thanks,
> >>
> >>~Jakub
> >>
> >>On Fri, Aug 31, 2007 at 11:56:52AM -0700, Arun Gupta wrote:
> >>>Thanks Jakub.
> >>>
> >>>The NetBeans project seems to be using Jersey directory structure for
> >>>resolving libraries and that gives the error attached in the image. I
> >>>resolved the references but building the project gives the following
> >>>error:
> >>>
> >>>C:\workarea\samples\JsonFromJaxb\JsonFromJaxb\build.xml:22: taskdef
> >>>class com.sun.ws.rest.tools.ant.WebResourcesProcessorTask cannot be
> >>>found
> >>>
> >>>-Arun
> >>>
> >>>Jakub Podlesak wrote:
> >>>>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
> >>>>>
> >>>>---------------------------------------------------------------------
> >>>>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
> >>
> >>---------------------------------------------------------------------
> >>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