[Jersey] Re: (Updated Possible issue) RE: CustomResolver (Marshaller) dual content type xml and json

From: Mohan KR \(mkannapa\) <"Mohan>
Date: Fri, 22 Apr 2011 10:34:33 -0500

Hello Pavel, I'll try to put together a test case (would be tough, given my
time constraints), but I will create an issue



Moxy (2.2.0) actually chokes completely, here is what I get for different
JSON configuration:

   * badgerFish -> nada (nothing)

   * natural -> null (strange)

   * mapped -> nada (nothing)


Actually, this is turning out to be a nightmare for us :), need to use some
Moxy features.


JAXB-RI (metro) means we have to make changes but the more severe problem is
this, our

restrictions are:

  * We cannot change the JDK install (so cannot e.g. drop JAXB 2.2 -API) via
endorsed mechanisms.

  * The production servers do *not* allow system properties to be set, so
can't drop the JAXB 2.2-API


jersey-json has transitive dependencies to JAXB 2.2 both impl and API.
Currently I am excluding that (although

I have heard that the JAXB 2.2 Impl (RI) automatically switches to 2.1 IMPL
if it finds JAXB 2.1 API (we run

JDK6 18). So one option we are seriously considering is to ditch Moxy for
now (time constraints) and use the

Sun JAXB impl probably 2.1.13.


Unfortunately, in an enterprise environments, you don;t have a lot of
flexiblility in changing the system environment,

the current JDK 6 and JAXB RI (metro impl) annoyance is becoming a major
pain for us :(.





Mohan KR


From: Pavel Bucek []
Sent: Friday, April 22, 2011 10:11 AM
Subject: [Jersey] Re: (Updated Possible issue) RE: CustomResolver
(Marshaller) dual content type xml and json


Pretty interesting. That is definitely a bug, can you please file new issue
in our issue tracker? Ideally with testcase..

Just out of curiosity - can you try the same thing with Moxy implementation?
It would be good to know that the issue is not in JAXB implementation but in
jersey-json module.


On 4/22/11 4:56 PM, Mohan KR (mkannapa) wrote:

Maybe it will help someone, but I was able to get the below to work, by
disable the formatted output marshaller

property (i.e. false). So, I am not sure why the JSON marshaller's are
sensitive to the formatting, don't know whether

it should be raised as a bug or that the JSON marshaller expects no
formatting, especially when fragment is turned on.






Mohan KR


From: Mohan KR (mkannapa) []
Sent: Friday, April 22, 2011 7:44 AM
Subject: RE: CustomResolver (Marshaller) dual content type xml and json



Apologize for bumping it, seeing if anyone had experience this? Some more
details here is my CustomResolver. A few things

I have tried:

  * Different JAXB impl : a) The one bundled with JDK1.6 b) Metro JAXB
2.1.13 c) Moxy 2.2.0

It does not matter, JSON is not being generated, and there are no logs that
i could see to tell where I'm going wrong.

If this is not the correct approach would appreciate any pointers in the
right direction.




public class ContextResolverMarshaller

        implements ContextResolver<Marshaller> {



    public Marshaller getContext(Class<?> type) {

        if (type == null) {

            return null;



        //We will create the JSONJaxbContext, so we can support both XML and

        JSONJAXBContext ctxt = null;

        // create a brand spanking new one, note I have tried all the
different JSON

        // configurations, to no avail

        try {

            ctxt = new
JSONJAXBContext(JSONConfiguration.badgerFish().build(), type);


        catch (final JAXBException ex) {

            return ctxt;



        Marshaller m = null;

        try {

            m = ctxt.createMarshaller();


        catch (final JAXBException ex) {

            return m;


        // set our properties

        this.setProperty(m, Marshaller.JAXB_FRAGMENT, Boolean.TRUE);

        this.setProperty(m, Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

        return m;



    private void setProperty(Marshaller m, String name, Object value) {

        try {

            m.setProperty(name, value);


        catch (final PropertyException ex) {










Mohan KR


From: Mohan KR (mkannapa) []
Sent: Wednesday, April 20, 2011 7:19 PM
Subject: CustomResolver (Marshaller) dual content type xml and json



  My core problem is I need to support XML and JSON in my responses. I have
JAXB annotated POJOS, and

  my resource method's have the appropriate @Produces Annotation. With this
setup everything appears

  to be working fine, using curl to send separate requests with the
appropriate Accept headers.


  After, making sure things were working, I need to set some Marshaller
Properties, and it appears that the

  recommended approach is to use the ContextResolver<Marshaller> approach. I
did that and registered it

  as a provider to the runtime. Now, XML content type is working fine, but
JSON is broken I get no content.

  Do I need to implement a JSONMarshaller too? Although my ContextResolver
is being called when I make

  the request with application/xml and application/json. Don't know whether
it is a bug or maybe I'm missing



  I'm using jersey 1.6. Thanks in advance.






Mohan KR