How to customize JAX-RS application exception handling?


I have configured a simple JAX-RS (not WebEngine as it is for programmatic web services) application as described in the documentation. I am using the

Nuxeo-WebModule: org.nuxeo.ecm.webengine.jaxrs.scan.DynamicApplicationFactory

line to discover my JAX-RS classes.

Everything is working as I need, with the small detail that the text/plain error response for WebExceptions that are raised in my JAX-RS classes includes the stack trace. I want them to only include the status line with an empty body.

What is the correct way to avoid/modify this behavior? I tried putting an ExceptionMapper implementation in my JAX-RS package but the DynamicApplicationFactory does not seem to discover/apply it. It is annotated with @Provider and is in the correct package.


0 votes

1 answers



You can override the handleError() method in your ModuleRoot class. Here is a sample

public Object handleError(WebApplicationException e) {
    if (e instanceof WebSecurityException) {
        return Response.status(401).entity(
    } else if (e instanceof WebResourceNotFoundException) {
        return Response.status(404).entity(
    } else {
        return super.handleError(e);
0 votes

Hmm, I don't have a ModuleRoot class. I just have POJOs annotated with the JAX-RS @Path and @Provider, and the DynamicApplicationFactory is doing the correct thing with respect to making those available.

I basically stopped reading before the line "Declaring a WebEngine Application in Nuxeo" since I was only interested in a JAX-RS application.

Will I need to subclass ModuleRoot to customize this behavior?


Ok, sorry i didn't read well your message and thought you were in a WebEngine app. BTW you can use WebEngine for a "programatic webservice" : we use it for instance in the Rest API and it provides some helpers to deal with documents. I will look for the proper way to do it in JAX-RS and come back to you.

Thanks for your help! I did look at the rest of the documentation and decided against using the WebEngine app for the time being, mostly because I really didn't need any of the .ftl or other tools for building more complex systems, since this is only a couple of JSON-driven web services for creating and polling specific documents in the repository.

I currently have a workaround which involves using a ContainerResponseFilter to remove the body from error responses, but clearly this is worse than stopping the stack trace from being printed in the first place.


Any more thoughts on this, Damien? I'm prepared to accept "there isn't a way right now" as an answer for now. :)