On Thu, Nov 19, 2009 at 07:33:19PM +0000, Paul Taylor wrote:
> 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
After applying the workaround, the '@'s will get removed by Jersey,
no need to apply any other filter. To be clear, you need to name all
possible attributes in your configuration to get rid of all '@'s,
which is why you probably would like to use the natural option.
> 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.
It's later than promised, but please see attached project including needed schema files
for details. (i had to update the original schema file and added a new one)
It shows how to use the natural notation (i.e. you do not need to configure
anything manually), just unzip it and launch mvn clean compile exec:java
then check out
http://localhost:9998/myresource which should give you:
{"release-group-list":{"release-group":[{"score":0},{"score":1},{"score":2},{"score":3},{"score":4}]}}
corresponding XML is then:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<metadata xmlns="
http://musicbrainz.org/ns/mmd-2.0#" xmlns:ns2="
http://musicbrainz.org/ns/ext#-2.0">
<release-group-list>
<release-group ns2:score="0"/>
<release-group ns2:score="1"/>
<release-group ns2:score="2"/>
<release-group ns2:score="3"/>
<release-group ns2:score="4"/>
</release-group-list>
</metadata>
Does it work for you?
~Jakub
> >
> 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
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>
--
Jakub Podlešák
Software Engineer at SUN Microsystems And CZJUG Co-Leader
http://blogs.sun.com/japod