users@jersey.java.net

Re: application/json programming model

From: Arun Gupta <Arun.Gupta_at_Sun.COM>
Date: Tue, 04 Sep 2007 21:52:48 -0700

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