users@jersey.java.net

Re: application/json programming model

From: Jakub Podlesak <Jakub.Podlesak_at_Sun.COM>
Date: Wed, 05 Sep 2007 08:32:19 +0200

Yep, I noticed only when you sent the stack trace
I should have taken jdk5 (btw. we have too many options regarding jdk,
it is great that annotations are supported only on the two...).

I will recompile with jdk5 and update the sample.

Thanks for trying it out and providing feedback!

~Jakub

On Tue, Sep 04, 2007 at 10:31:50PM -0700, Arun Gupta wrote:
> Yes, I'm using JDK 5 and don't have JDK 6 on my machine.
>
> In general, I think all our samples should be compiled with JDK5.
>
> -Arun
>
> Jakub Podlesak wrote:
> >Hi Arun,
> >
> >I have added the example to the Jersey repository. It should be also
> >part of recently issued stable version snapshot 0.2.1 available at:
> >https://jersey.dev.java.net/servlets/ProjectDocumentList?folderID=7654&expandFolder=7654&folderID=0
> >
> >You might want to try it from there.
> >
> >Thanks,
> >
> >~Jakub
> >
> >P.S. Your issue can be IMHO also resolved by using jdk6 instead of jdk5.
> >You are using jdk5 now, right?
> >
> >
> >On Tue, Sep 04, 2007 at 09:52:48PM -0700, 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
> >>
> >
> >---------------------------------------------------------------------
> >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
>