in src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java [602:635]
private Servlet getDefaultErrorServlet(
final SlingHttpServletRequest request,
final Resource resource,
final ResourceResolver resolver) {
// find a default error handler according to the resource type
// tree of the given resource
String extension = request.getRequestPathInfo().getExtension();
final ResourceCollector locationUtil = new ResourceCollector(
ServletResolverConstants.DEFAULT_ERROR_HANDLER_METHOD,
DEFAULT_ERROR_HANDLER_RESOURCE_TYPE, resource,
extension, this.executionPaths.get(), this.useResourceCaching);
final Servlet servlet = getServletInternal(locationUtil, request, resolver);
if (servlet != null) {
return servlet;
}
// if no registered default error handler could be found use
// the DefaultErrorHandlerServlet as an ad-hoc fallback
Servlet fallbackServlet = fallbackErrorServlet.get();
if (fallbackServlet == null) {
// fall back to an adhoc instance of the DefaultErrorHandlerServlet
// if the actual service is not registered (yet ?)
try {
fallbackServlet = new DefaultErrorHandlerServlet();
fallbackServlet.init(new SlingServletConfig(servletContext,
null, "Sling (Ad Hoc) Default Error Handler Servlet"));
fallbackErrorServlet.set(fallbackServlet);
} catch (ServletException se) {
LOGGER.error("Failed to initialize error servlet", se);
}
}
return fallbackServlet;
}