in src/main/java/org/apache/sling/engine/impl/DefaultErrorHandler.java [214:283]
private void sendError(
final int status,
final String message,
final Throwable throwable,
final HttpServletRequest request,
final HttpServletResponse response)
throws IOException {
// error situation
final String servletName = (String) request.getAttribute(RequestDispatcher.ERROR_SERVLET_NAME);
String requestURI = (String) request.getAttribute(RequestDispatcher.ERROR_REQUEST_URI);
if (requestURI == null) {
requestURI = request.getRequestURI();
}
// set the status, content type and encoding
response.setStatus(status);
response.setContentType("text/html; charset=UTF-8");
final PrintWriter pw = response.getWriter();
pw.print("<html><head><title>");
if (message == null) {
pw.print("Internal error");
} else {
pw.print(ResponseUtil.escapeXml(message));
}
pw.println("</title></head><body><h1>");
if (throwable != null) {
pw.println(ResponseUtil.escapeXml(throwable.toString()));
} else if (message != null) {
pw.println(ResponseUtil.escapeXml(message));
} else {
pw.println("Internal error (no Exception to report)");
}
pw.println("</h1><p>");
pw.print("RequestURI=");
pw.println(ResponseUtil.escapeXml(request.getRequestURI()));
if (servletName != null) {
pw.println("</p><p>Servlet=");
pw.println(ResponseUtil.escapeXml(servletName));
}
pw.println("</p>");
if (throwable != null) {
final PrintWriter escapingWriter = new PrintWriter(ResponseUtil.getXmlEscapingWriter(pw));
pw.println("<h3>Exception stacktrace:</h3>");
pw.println("<pre>");
pw.flush();
throwable.printStackTrace(escapingWriter);
escapingWriter.flush();
pw.println("</pre>");
final RequestProgressTracker tracker =
((SlingJakartaHttpServletRequest) request).getRequestProgressTracker();
pw.println("<h3>Request Progress:</h3>");
pw.println("<pre>");
pw.flush();
tracker.dump(new PrintWriter(escapingWriter));
escapingWriter.flush();
pw.println("</pre>");
}
pw.println("<hr /><address>");
pw.println(ResponseUtil.escapeXml(serverInfo));
pw.println("</address></body></html>");
// commit the response
response.flushBuffer();
// close the response (SLING-2724)
pw.close();
}