private void sendError()

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();
    }