You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@wink.apache.org by Jaroslav Libák <ja...@seznam.cz> on 2009/10/15 10:51:57 UTC

WebApplicationException when producing application/json using JAXB in trunk

Hello

I think I found a bug in wink trunk. I have a rest resource class which returns a custom Asset. It works in a similar way like qadefect to produce XML and JSON. Asset class has a method annotated with "@Produces( {MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})" and returns JAXB class instance with @XmlRootElement. This top JAXB class is a container for a collection of other JAXB classes.

It all worked well with wink-1.0, but when I switched to trunk (which fixes some bugs I found) it stopped working. I'm getting WebApplicationException now in FlushResultHandler.java:210.

While debugging I found it strange that for application/json some code in MediaTypeUtils.isXmlType got executed, which of course can't find "+xml" in media type subtype. This then led to my @Produces annotated method being ignored. wink 1.0 probably goes slightly different path and MediaTypeUtils.isXmlType is never invoked for json.

Full exception:
bApplicationException (500 - Internal Server Error) occured during the handlers
chain invocation
javax.ws.rs.WebApplicationException
        at org.apache.wink.server.internal.handlers.FlushResultHandler.handleResponse(FlushResultHandler.java:210)
        at org.apache.wink.server.handlers.AbstractHandler.handleResponse(AbstractHandler.java:38)
        at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26)
        at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22)
        at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:61)
        at org.apache.wink.server.handlers.AbstractHandler.handleResponse(AbstractHandler.java:39)
        at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26)
        at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22)
        at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:61)
        at org.apache.wink.server.handlers.AbstractHandler.handleResponse(AbstractHandler.java:39)
        at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26)
        at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22)
        at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:61)
        at org.apache.wink.server.handlers.AbstractHandlersChain.run(AbstractHandlersChain.java:48)
        at org.apache.wink.server.internal.RequestProcessor.handleRequestWithoutFaultBarrier(RequestProcessor.java:158)
        at org.apache.wink.server.internal.RequestProcessor.handleRequest(RequestProcessor.java:133)
        at org.apache.wink.server.internal.servlet.RestServlet.service(RestServlet.java:105)

Jaroslav Libak

Re: Re: WebApplicationException when producing application/json using JAXB in trunk

Posted by Jaroslav Libák <ja...@seznam.cz>.
Hello

I did not include  wink-json-provider jar. After inclusion everything works again. Thanks!

Jaroslav Libak

> ------------ Pôvodná správa ------------
> Od: Bryant Luk <bl...@apache.org>
> Predmet: Re: WebApplicationException when producing application/json using JAXB
> in trunk
> Dátum: 15.10.2009 13:34:02
> ----------------------------------------
> Hi Jaroslav,
> 
> Are you including the wink-json-provider JAR in your application?  The
> built-in 0.1 JAX-RS JSON code has now been given its own module so
> that you can choose your own JSON provider (in case you want to pick
> Jettison or Jackson or anything else instead).  If you include the
> wink-json-provider-<version>.jar and org.json's json-20080701.jar in
> your classpath, it should function similarly as before.
> 
> The reason why the isXmlType is executed (and returns false) is
> because the JAXB XML provider has a @Produces of */* which means the
> JAXB XML Provider isWritable is executed for any returned JAXB type.
> The JAXB XML provider correctly returns false for your
> application/json code (which is expected).
> 
> 2009/10/15 Jaroslav Libák <ja...@seznam.cz>:
> > Hello
> >
> > I think I found a bug in wink trunk. I have a rest resource class which
> returns a custom Asset. It works in a similar way like qadefect to produce XML
> and JSON. Asset class has a method annotated with "@Produces(
> {MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})" and returns JAXB class
> instance with @XmlRootElement. This top JAXB class is a container for a
> collection of other JAXB classes.
> >
> > It all worked well with wink-1.0, but when I switched to trunk (which fixes
> some bugs I found) it stopped working. I'm getting WebApplicationException now
> in FlushResultHandler.java:210.
> >
> > While debugging I found it strange that for application/json some code in
> MediaTypeUtils.isXmlType got executed, which of course can't find "+xml" in
> media type subtype. This then led to my @Produces annotated method being
> ignored. wink 1.0 probably goes slightly different path and
> MediaTypeUtils.isXmlType is never invoked for json.
> >
> > Full exception:
> > bApplicationException (500 - Internal Server Error) occured during the
> handlers
> > chain invocation
> > javax.ws.rs.WebApplicationException
> >        at
> org.apache.wink.server.internal.handlers.FlushResultHandler.handleResponse(FlushResultHandler.java:210)
> >        at
> org.apache.wink.server.handlers.AbstractHandler.handleResponse(AbstractHandler.java:38)
> >        at
> org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26)
> >        at
> org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22)
> >        at
> org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:61)
> >        at
> org.apache.wink.server.handlers.AbstractHandler.handleResponse(AbstractHandler.java:39)
> >        at
> org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26)
> >        at
> org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22)
> >        at
> org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:61)
> >        at
> org.apache.wink.server.handlers.AbstractHandler.handleResponse(AbstractHandler.java:39)
> >        at
> org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26)
> >        at
> org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22)
> >        at
> org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:61)
> >        at
> org.apache.wink.server.handlers.AbstractHandlersChain.run(AbstractHandlersChain.java:48)
> >        at
> org.apache.wink.server.internal.RequestProcessor.handleRequestWithoutFaultBarrier(RequestProcessor.java:158)
> >        at
> org.apache.wink.server.internal.RequestProcessor.handleRequest(RequestProcessor.java:133)
> >        at
> org.apache.wink.server.internal.servlet.RestServlet.service(RestServlet.java:105)
> >
> > Jaroslav Libak
> >
> 
> 
> 

Re: WebApplicationException when producing application/json using JAXB in trunk

Posted by Bryant Luk <bl...@apache.org>.
Hi Jaroslav,

Are you including the wink-json-provider JAR in your application?  The
built-in 0.1 JAX-RS JSON code has now been given its own module so
that you can choose your own JSON provider (in case you want to pick
Jettison or Jackson or anything else instead).  If you include the
wink-json-provider-<version>.jar and org.json's json-20080701.jar in
your classpath, it should function similarly as before.

The reason why the isXmlType is executed (and returns false) is
because the JAXB XML provider has a @Produces of */* which means the
JAXB XML Provider isWritable is executed for any returned JAXB type.
The JAXB XML provider correctly returns false for your
application/json code (which is expected).

2009/10/15 Jaroslav Libák <ja...@seznam.cz>:
> Hello
>
> I think I found a bug in wink trunk. I have a rest resource class which returns a custom Asset. It works in a similar way like qadefect to produce XML and JSON. Asset class has a method annotated with "@Produces( {MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})" and returns JAXB class instance with @XmlRootElement. This top JAXB class is a container for a collection of other JAXB classes.
>
> It all worked well with wink-1.0, but when I switched to trunk (which fixes some bugs I found) it stopped working. I'm getting WebApplicationException now in FlushResultHandler.java:210.
>
> While debugging I found it strange that for application/json some code in MediaTypeUtils.isXmlType got executed, which of course can't find "+xml" in media type subtype. This then led to my @Produces annotated method being ignored. wink 1.0 probably goes slightly different path and MediaTypeUtils.isXmlType is never invoked for json.
>
> Full exception:
> bApplicationException (500 - Internal Server Error) occured during the handlers
> chain invocation
> javax.ws.rs.WebApplicationException
>        at org.apache.wink.server.internal.handlers.FlushResultHandler.handleResponse(FlushResultHandler.java:210)
>        at org.apache.wink.server.handlers.AbstractHandler.handleResponse(AbstractHandler.java:38)
>        at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26)
>        at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22)
>        at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:61)
>        at org.apache.wink.server.handlers.AbstractHandler.handleResponse(AbstractHandler.java:39)
>        at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26)
>        at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22)
>        at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:61)
>        at org.apache.wink.server.handlers.AbstractHandler.handleResponse(AbstractHandler.java:39)
>        at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26)
>        at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22)
>        at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:61)
>        at org.apache.wink.server.handlers.AbstractHandlersChain.run(AbstractHandlersChain.java:48)
>        at org.apache.wink.server.internal.RequestProcessor.handleRequestWithoutFaultBarrier(RequestProcessor.java:158)
>        at org.apache.wink.server.internal.RequestProcessor.handleRequest(RequestProcessor.java:133)
>        at org.apache.wink.server.internal.servlet.RestServlet.service(RestServlet.java:105)
>
> Jaroslav Libak
>