Customizing the Response to HTTP 500 Errors

HTTP 500 errors are caused by server-side exceptions.

When request processing results in an exception, the Apache Sling framework (that AEM is built on):

  • logs the exception

  • returns:

    • the HTTP response code 500
    • the exception stack trace

    in the body of the response.

By customizing the pages shown by the error handler a 500.jsp script can be created. However, it is only used if HttpServletResponse.sendError(500) is executed explicitly; that is, from an exception catcher.

Otherwise, the response code is set to 500, but the 500.jsp script is not executed.

To handle 500 errors, the file name of the error handler script must be the same as the exception class (or superclass). To handle all such exceptions, you can create a script /apps/sling/servlet/errorhandler/Throwable.jsp or /apps/sling/servlet/errorhandler/Exception.jsp.

CAUTION
On an author instance, the CQ WCM Debug Filter is enabled by default. This always results in the response code 200. The default error handler responds by writing the full stack trace to the response.
For a custom error-handler, responses with code 500 are needed - so the CQ WCM Debug Filter must be disabled. This ensures that the response code 500 is returned, which in turn triggers the correct Sling error-handler.
On a publish instance, the CQ WCM Debug Filter is always disabled (even if configured as enabled).

Experience Manager