users@jersey.java.net

Re: [Jersey] Json output not always matching xml output

From: Paul Taylor <paul_t100_at_fastmail.fm>
Date: Thu, 19 Nov 2009 19:33:19 +0000

Jakub Podlesak wrote:
> Hi Paul,
>
> please see inline...
>
> On Wed, Nov 18, 2009 at 08:12:35PM +0000, Paul Taylor wrote:
>
>> Jakub Podlesak wrote:
>>
>>> Hi Paul,
>>>
>>> It turns out, JAXB runtime does not provide correct information
>>> on the score attribute in this (unfortunate xs:anyAttribute) case.
>>> I am not sure this could be fixed easily, but you can try using the
>>> following
>>> JSON configuration as a workaround:
>>>
>>> return new JSONJAXBContext(
>>> JSONConfiguration
>>> .mapped()
>>> .attributeAsElement("score")
>>> .arrays("release-group")
>>> // comment this out, if you want to get string "50"
>>> instead of number 50
>>> .nonStrings("score")
>>> .build(),
>>> "org.musicbrainz.mmd2");
>>>
>>> in the initJsonContext method.
>>>
>>> Which gives me:
>>>
>>> {"release-group-list":{"release-group":[{"score":50},{"score":50},{"score":50},{"score":50},{"score":50}]}}
>>>
>>> HTH,
>>>
>>> ~Jakub
>>>
>>>
>> Hmm, Unfortunately I need to use mapping natural() so that the json
>> matches the form of json returned by another (non-java) api , and this
>> doesn't have the attributesAsElement option so I can't use this workaround.
>>
>
> I do not understand. What matters is the JSON format, and the only thing
> you get from using attributeAsElement option in Jersey is you get rid of
> the '@' prefixes. The other (non-java) api should be able to process
> such JSON data. What am i missing?
>
I think you mean 'and the only thing you get from using *natural* option
in Jersey is you get rid of the '@' prefixes'

yes okay, but the code (written by someone else) that processeses my
output doesn't expect to see these @, they already have code for
processing json that comes back from a database that doesnt
contain '@' for attributes so they don't want them. Perhaps I could use
your workaround then remove the @'s myself but that would be using
rexexp , expensive and I might make a mess of it. It would be nice if
json api allowed
removal of @ AND use of attributeAsElemnt() method.
>
>> I could modify the xsd though, could you show me how to change the xsd
>> so that there is a score attribute on releasegroup which is (and this is
>> the bit i don't get) is a part of the "http://musicbrainz.org/ns/ext#-2.0"
>> namespace rather than the main namespace.
>>
>
> O.K. i could provide you st later tonight my time.
>
So , this seems like maybe a neater workaround that once done is safe
and wont increase generation time of xml,


thanks for your help

Paul