On Tue, Mar 10, 2009 at 01:45:11PM -0600, Andrew Ochsner wrote:
> Sorry, one more unfortunate update.
>
> Using XmlElementWrapper, while gets us closer to correct JSON (and looks to
> be correct XML) it really messes things up for us in JSON when there are
> elements in the array where it looks like :
> { "items": { "item": {}, "item":{} }
I suppose the issue now lays in the Item bean,
since it's content is not being written.
How the XML looks like?
Could you give a quick try with something like:
@XmlRootElement
public class Item {
public String field1 = "one";
public String field2 = "two";
}
And second thing: the JSON above is incorrect, you should not have
two "item" objects encapsulated in the same container object,
how did you get it? Default mapped convention?
And i am also a bit confused with your desired JSON format, since
{"items":[{"field1":"val1","field2":"val2"}] differs from
{"items":[{"item":{"field1":"val1","field2":"val2"}}]
Could you please clarify? I mean, could you give us some examples
of JSON exprs you need to get generated?
And the last thing: If i understand it correctly: you do need both XML and JSON generated, right?
Thanks,
~Jakub
>
> So, we really have an issue here. And the hack solution really defeats the
> purpose for us as we want to generate documentation based on the code (as
> opposed to javadoc which can and will get out of sync). We can't infer much
> from a Response return value.
>
> Thanks
> Andy O
>
> On Tue, Mar 10, 2009 at 10:20 AM, Moiz Dohadwala <mdohadwala_at_mokafive.com>wrote:
>
> > Hello,
> >
> >
> >
> > Thank you all for your suggestions. I had tried out the annotations
> > suggested below without success prior to posting to the mailing list. Right
> > now, due to time pressure, I have implemented the following ugly hack:
> >
> >
> >
> > If( rows.getTotalCount() == 0 )
> >
> > {
> >
> > return Response.ok(“{rows:[], totalCount:0}”).build();
> >
> > else
> >
> > {
> >
> > return Response.ok(rows).build();
> >
> > }
> >
> >
> >
> > This seems to have tied me over for now.
> >
> >
> >
> > I would suggest changes to the JSONConfiguration.arrays() api to specify
> > forcing of the empty arrays.
> >
> >
> >
> > -Moiz
> >
> >
> >
> > *From:* aochsner_at_gmail.com [mailto:aochsner_at_gmail.com] *On Behalf Of *Andrew
> > Ochsner
> > *Sent:* Tuesday, March 10, 2009 8:49 AM
> > *To:* users_at_jersey.dev.java.net
> > *Subject:* Re: [Jersey] RE: array handling in JAXB to JSON conversion
> >
> >
> >
> > So, a little update because I'm running into the same issue, except I'm
> > using the natural mapping.
> >
> >
> > Various combinations of required=true/false and nillable = true/false have
> > not helped. In fact, when getting as XML, the <items/> element is not
> > getting written out. So that's a JAXB thing.
> >
> > So I'm trying the XmlElementWrapper, and it's close. The XML does spit out
> > <items/> which is good, but the JSON is { "items":[null] } which doesn't
> > seem to be the same as { "items":[] } which is what I want.
> >
> > HTH
> > Andy O
> >
> > On Mon, Mar 9, 2009 at 10:39 AM, Jakub Podlesak <Jakub.Podlesak_at_sun.com>
> > wrote:
> >
> > On Mon, Mar 09, 2009 at 05:10:19PM +0100, Paul Sandoz wrote:
> > > Hi Jakub,
> > >
> > > Do you mean that JAXB is not writing out any start element for "items"
> > > because the value of the items field is null or empty?
> >
> > Hmmm, you are right, jaxb should generate at least <items/>, which should
> > IIRC get
> > translated into "items":null for the default mapped convention.
> >
> > Need to check this out, and then will report back here.
> >
> > ~Jakub
> >
> >
> >
> > >
> > > There may be an annotation to force JAXB to always write out "items":
> > >
> > > 1) using c; or
> >
> > >
> > > 1) using XmlElementWrapper, the JavaDoc states:
> > >
> > >
> > http://java.sun.com/javase/6/docs/api/javax/xml/bind/annotation/XmlElementWrapper.html
> > > The two serialized XML forms allow a null collection to be represented
> > > either by absence or presence of an
> > > element with a nillable attribute.
> > >
> > > or it may be possible to utilize XmlJavaTypeAdapter.
> > >
> > > Paul.
> > >
> > > On Mar 9, 2009, at 4:47 PM, Jakub Podlesak wrote:
> > >
> > >>
> > >> Hi Moiz,
> > >>
> > >> You have hit an edge case, and i am afraid i have no good news for you.
> > >> Jersey JSON provider takes what JAXB gives out, and the information
> > >> about the emtpy array is obviously missing.
> > >>
> > >> One option would be to try out the provider mentioned by Tatu.
> > >> Have you had a chance to test it yet?
> > >>
> > >> Another option would be to use the low-level JSONObect/JSONArray
> > >> providers (used in bookmark example [1].
> > >>
> > >> ~Jakub
> > >>
> > >> [1]
> > http://download.java.net/maven/2/com/sun/jersey/samples/bookmark/1.0.3-SNAPSHOT/bookmark-1.0.3-SNAPSHOT-project.zip
> > >>
> > >>
> > >> On Fri, Mar 06, 2009 at 07:21:51AM -0800, Moiz Dohadwala wrote:
> > >>> I have tried that too, but hasn't worked either.
> > >>>
> > >>> -Moiz
> > >>>
> > >>> From: Wilhelmsen Tor Iver [mailto:TorIverW_at_arrive.no]
> > >>> Sent: Friday, March 06, 2009 5:01 AM
> > >>> To: users_at_jersey.dev.java.net
> > >>> Subject: Re: [Jersey] RE: array handling in JAXB to JSON conversion
> > >>>
> > >>> Try adding required=true to this:
> > >>>
> > >>> @XmlElement(name="items")
> > >>> List<Item> items;
> > >>>
> > >>> or else tell JAXB to treat nulls and empty collections differently. We
> > >>> ran into the same issue where null/empty elements were absent from the
> > >>> XML and thus a JAXB client would generate classes missing these
> > >>> properties.
> > >>
> > >> ---------------------------------------------------------------------
> > >> 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
> > >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> > For additional commands, e-mail: users-help_at_jersey.dev.java.net
> >
> >
> >