users@jersey.java.net

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

From: Pavel Bucek <pavel.bucek_at_oracle.com>
Date: Fri, 22 Apr 2011 17:10:43 +0200

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.

Thanks!
Pavel

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.
>
> Thanks!
>
> Regards,
>
> Mohan KR
>
> *From:*Mohan KR (mkannapa) [mailto:mkannapa_at_gmail.com]
> *Sent:* Friday, April 22, 2011 7:44 AM
> *To:* users_at_jersey.java.net
> *Subject:* RE: CustomResolver (Marshaller) dual content type xml and json
>
> *bump*
>
> 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.
>
> @Provider
>
> *public**class*ContextResolverMarshaller
>
> *implements*ContextResolver<Marshaller> {
>
> @Override
>
> *public*Marshaller getContext(Class<?> type) {
>
> *if*(type == *null*) {
>
> *return**null*;
>
> }
>
> //We will create the JSONJaxbContext, so we can support both XML and JSON
>
> 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) {
>
> //log
>
> }
>
> }
>
> }
>
> Thanks!
>
> Regards,
>
> Mohan KR
>
> *From:*Mohan KR (mkannapa) [mailto:mkannapa_at_gmail.com]
> *Sent:* Wednesday, April 20, 2011 7:19 PM
> *To:* users_at_jersey.java.net
> *Subject:* CustomResolver (Marshaller) dual content type xml and json
>
> Greetings,
>
> 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
>
> something.
>
> I'm using jersey 1.6. Thanks in advance.
>
> Thanks!
>
> Regards,
>
> Mohan KR
>