in src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java [631:665]
private Servlet getDefaultErrorServlet(
final SlingJakartaHttpServletRequest 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;
}