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!");
}