On Feb 2, 2010, at 3:08 PM, Robert Koberg wrote:
>
> On Feb 2, 2010, at 2:15 AM, Paul Sandoz wrote:
>
>> Hi Chris,
>>
>> Jersey will always throw a WebApplicationException for HTTP error-
>> based responses, and only the status code (and potentially some
>> headers) will be set, the entity will not be set.
>>
>> So you can register an ExceptionMapper for WebApplicationException.
>>
>> JAX-RS/Jersey will re-throw any exception that is not mapped to the
>> container.
>>
>> Thus for full mapping i recommend doing the following:
>>
>> - register an ExceptionMapper<WebApplicationException> to modify
>> responses, perhaps specific to the HTTP status code.
>>
>> - register an ExceptionMapper<Throwable> to catch all other
>> exceptions, perhaps with a generic response signaling a 500
>> sever error.
>
>
> In Tomcat, the only way I could see how to ensure all errors come
> back as JSON, was to create a Tomcat specific Valve that extends
> org.apache.catalina.valves.ErrorReportValve. For Tomcat at least,
> the default error valve is hard coded to write out HTML (not even
> XHTML).
>
Yes, the Tomcat layer can also produce error responses.
Did you try using an ExceptionMapper? in what cases did it not work
for you?
I forgot to mention an edge cases on mapping exceptions:
- when writing the response only the mapping of
WebApplicationException is performed, and only if the response has not
been
committed (one or more bytes written).
perhaps that is a mistake and JAX-RS should relax it and any exception
can be mapped if the response has not been committed?
Paul.