users@jersey.java.net

Re: [Fwd: [Jersey] Adding an attribute to element breaks json output]

From: Jakub Podlesak <Jakub.Podlesak_at_Sun.COM>
Date: Fri, 09 Apr 2010 16:23:36 +0200

Hi Paul,

Paul Taylor wrote:
>
> Hi Jakub
>
> No answer on this, and youv'e helped me out before so I was hoping you
> could at least confirm there is a bug here

I am sorry for that. There was another new baby born in Jersey team (on
the 1st April :-),
and being busy with other things, i missed that e-mail,

>
> thanks Paul
>
> -------- Original Message --------
> Subject: [Jersey] Adding an attribute to element breaks json output
> Date: Fri, 02 Apr 2010 11:46:41 +0100
> From: Paul Taylor <paul_t100_at_fastmail.fm>
> Reply-To: users_at_jersey.dev.java.net
> To: users_at_jersey.dev.java.net
>
>
>
> Hi, I am having a problem displaying an int attribute in json for my
> tag element, without adding it the output looks okay
>
> if(tags.length>0)
> {
> TagList tagList = of.createTagList();
> for(int i = 0;i<tags.length;i++) {
> Tag tag = of.createTag();
> tag.setContent(tags[i]);
> *//tag.setCount(new BigInteger(tagCounts[i]));*
> tagList.getTag().add(tag);
> }
> recording.setTagList(tagList);
> }
>
> Xml is<?xml version="1.0" encoding="UTF-8" standalone="yes"?><metadata
> xmlns="http://musicbrainz.org/ns/mmd-2.0#"
> xmlns:ext="http://musicbrainz.org/ns/ext#-2.0"><recording-list
> offset="0" count="1"><recording ext:score="100"
> id="7ca7782b-a602-448b-b108-bb881a7be2d6"><title>Gravitational
> Lenz</title><length>234000</length><artist-credit><name-credit><artist
> id="4302e264-1cf0-4d1f-aca7-2a6f89e34b36"><name>Farming
> Incident</name><sort-name>Incident,
> Farming</sort-name></artist></name-credit></artist-credit><release-list><release
> id="1d9e8ed6-3893-4d3b-aa7d-6cd79609e386"><title>Our Glorious 5 Year
> Plan</title><status>official</status><release-group
> type="album"/><medium-list><track-count>10</track-count><medium><position>1</position><track-list
> offset="4" count="10"><track><title>Gravitational
> Lens</title></track></track-list></medium></medium-list></release></release-list><isrc-list><isrc
> id="123456789"/><isrc
> id="abcdefghi"/></isrc-list><*tag-list><tag>indie</tag></tag-list>*</recording></recording-list></metadata>
>
> Json
> is{"recording-list":{"offset":0,"count":1,"recording":[{"score":"100","id":"7ca7782b-a602-448b-b108-bb881a7be2d6","title":"Gravitational
> Lenz","length":234000,"artist-credit":{"name-credit":[{"artist":{"id":"4302e264-1cf0-4d1f-aca7-2a6f89e34b36","name":"Farming
> Incident","sort-name":"Incident,
> Farming"}}]},"release-list":{"release":[{"id":"1d9e8ed6-3893-4d3b-aa7d-6cd79609e386","title":"Our
> Glorious 5 Year
> Plan","status":"official","release-group":{"type":"album"},"medium-list":{"track-count":10,"medium":[{"position":1,"track-list":{"offset":4,"count":10,"track":[{"title":"Gravitational
> Lens"}]}}]}}]},"isrc-list":{"isrc":[{"id":"123456789"},{"id":"abcdefghi"}]},*"tag-list":{"tag":["indie"]}}]}}*
>
> I then uncomment the line
>
> if(tags.length>0)
> {
> TagList tagList = of.createTagList();
> for(int i = 0;i<tags.length;i++) {
> Tag tag = of.createTag();
> tag.setContent(tags[i]);
> *//tag.setCount(new BigInteger(tagCounts[i]));*
> tagList.getTag().add(tag);
> }
> recording.setTagList(tagList);
> }
>
> Xml is<?xml version="1.0" encoding="UTF-8" standalone="yes"?><metadata
> xmlns="http://musicbrainz.org/ns/mmd-2.0#"
> xmlns:ext="http://musicbrainz.org/ns/ext#-2.0"><recording-list
> offset="0" count="1"><recording ext:score="100"
> id="7ca7782b-a602-448b-b108-bb881a7be2d6"><title>Gravitational
> Lenz</title><length>234000</length><artist-credit><name-credit><artist
> id="4302e264-1cf0-4d1f-aca7-2a6f89e34b36"><name>Farming
> Incident</name><sort-name>Incident,
> Farming</sort-name></artist></name-credit></artist-credit><release-list><release
> id="1d9e8ed6-3893-4d3b-aa7d-6cd79609e386"><title>Our Glorious 5 Year
> Plan</title><status>official</status><release-group
> type="album"/><medium-list><track-count>10</track-count><medium><position>1</position><track-list
> offset="4" count="10"><track><title>Gravitational
> Lens</title></track></track-list></medium></medium-list></release></release-list><isrc-list><isrc
> id="123456789"/><isrc id="abcdefghi"/></isrc-list>*<tag-list><tag
> count="101">indie</tag></tag-list>*</recording></recording-list></metadata>
>
> Json
> is{"recording-list":{"offset":0,"count":1,"recording":[{"score":"100","id":"7ca7782b-a602-448b-b108-bb881a7be2d6","title":"Gravitational
> Lenz","length":234000,"artist-credit":{"name-credit":[{"artist":{"id":"4302e264-1cf0-4d1f-aca7-2a6f89e34b36","name":"Farming
> Incident","sort-name":"Incident,
> Farming"}}]},"release-list":{"release":[{"id":"1d9e8ed6-3893-4d3b-aa7d-6cd79609e386","title":"Our
> Glorious 5 Year
> Plan","status":"official","release-group":{"type":"album"},"medium-list":{"track-count":10,"medium":[{"position":1,"track-list":{"offset":4,"count":10,"track":[{"title":"Gravitational
> Lens"}]}}]}}]},"isrc-list":{"isrc":[{"id":"123456789"},{"id":"abcdefghi"}]},*"tag-list":{"tag":[{"count":101,"$":"indie"}]}}]}}*
>
> and now the json has a "$" field between 101 and indie, I dont know
> much about json but that isnt right is it ?

It is not a bug, as the "$" character marks the tag content, which
otherwise does not have any name.
This is how things are designed in this case.

Is the "$" name an issue for you? If so, do you have any suggestion
regarding how to compute more appropriate name?

~Jakub

>
> And this is the contents of the Tag class:
>
> //
> // This file was generated by the JavaTM Architecture for XML
> Binding(JAXB) Reference Implementation, vhudson-jaxb-ri-2.1-792
> // See <a
> href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
> // Any modifications to this file will be lost upon recompilation of
> the source schema.
> // Generated on: 2010.03.25 at 10:49:46 PM GMT
> //
>
>
> package org.musicbrainz.mmd2;
>
> import java.math.BigInteger;
> import javax.xml.bind.annotation.XmlAccessType;
> import javax.xml.bind.annotation.XmlAccessorType;
> import javax.xml.bind.annotation.XmlAttribute;
> import javax.xml.bind.annotation.XmlRootElement;
> import javax.xml.bind.annotation.XmlSchemaType;
> import javax.xml.bind.annotation.XmlType;
> import javax.xml.bind.annotation.XmlValue;
>
>
> /**
> * <p>Java class for anonymous complex type.
> *
> * <p>The following schema fragment specifies the expected content
> contained within this class.
> *
> * <pre>
> * &lt;complexType>
> * &lt;complexContent>
> * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
> * &lt;attribute name="count"
> type="{http://www.w3.org/2001/XMLSchema}nonNegativeInteger" />
> * &lt;/restriction>
> * &lt;/complexContent>
> * &lt;/complexType>
> * </pre>
> *
> *
> */
> @XmlAccessorType(XmlAccessType.FIELD)
> @XmlType(name = "", propOrder = {
> "content"
> })
> @XmlRootElement(name = "tag")
> public class Tag {
>
> @XmlValue
> protected String content;
> @XmlAttribute
> @XmlSchemaType(name = "nonNegativeInteger")
> protected BigInteger count;
>
> /**
> * Gets the value of the content property.
> *
> * @return
> * possible object is
> * {_at_link String }
> *
> */
> public String getContent() {
> return content;
> }
>
> /**
> * Sets the value of the content property.
> *
> * @param value
> * allowed object is
> * {_at_link String }
> *
> */
> public void setContent(String value) {
> this.content = value;
> }
>
> /**
> * Gets the value of the count property.
> *
> * @return
> * possible object is
> * {_at_link BigInteger }
> *
> */
> public BigInteger getCount() {
> return count;
> }
>
> /**
> * Sets the value of the count property.
> *
> * @param value
> * allowed object is
> * {_at_link BigInteger }
> *
> */
> public void setCount(BigInteger value) {
> this.count = value;
> }
>
> }
>
>
> thanks Paul
>