private void handleError()

in core/src/main/java/org/apache/sling/cms/core/internal/servlets/CmsDefaultErrorHandlerServlet.java [158:209]


    private void handleError(SlingHttpServletRequest slingRequest, SlingHttpServletResponse slingResponse) {

        Resource resource = slingRequest.getResource();
        ResourceResolver resolver = slingRequest.getResourceResolver();

        int errorCode = getErrorCode(slingRequest, resolver);
        log.debug("Calculating error handling scripts for resource {} and error code {}", resource, errorCode);

        if (slingRequest.getAttribute(SlingConstants.ERROR_EXCEPTION) != null) {
            log.warn("Handing exception of type {} {}", errorCode,
                    slingRequest.getAttribute(SlingConstants.ERROR_EXCEPTION));
        }

        Resource handler = null;
        try {
            SiteManager siteMgr = resource.adaptTo(SiteManager.class);
            if (siteMgr != null && siteMgr.getSite() != null) {
                Site site = siteMgr.getSite();
                log.debug("Checking for error pages in the site {}", site.getPath());

                handler = site.getResource().getChild(SITE_ERRORS_SUBPATH + errorCode);
                if (handler == null) {
                    handler = site.getResource().getChild(SITE_ERRORS_SUBPATH + DEFAULT_ERROR_PAGE);
                }
                if (handler != null) {
                    log.debug("Using error handler {}", handler);
                } else {
                    log.debug("No error page defined for site {}", site.getPath());
                }
            }
        } catch (Exception e) {
            log.debug("Failed to retrieve current site, using default error handling");
        }

        if (handler == null) {
            log.debug("Using Sling CMS default error pages");
            handler = resolver.getResource(SLING_CMS_ERROR_PATH + errorCode);
            if (handler == null) {
                handler = resolver.getResource(SLING_CMS_ERROR_PATH + DEFAULT_ERROR_PAGE);
            }
            log.debug("Using Sling CMS error handler {}", handler);
        }

        log.debug("Sending error {}", errorCode);
        slingResponse.reset();
        slingResponse.setContentType("text/html");
        slingResponse.setStatus(errorCode);

        doInclude(slingRequest, slingResponse, handler);

        log.debug("Error handler initialized successfully!");
    }