private int getErrorCode()

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


    private int getErrorCode(SlingHttpServletRequest slingRequest, ResourceResolver resolver) {

        int errorCode = Optional.ofNullable(slingRequest.getAttribute(SlingConstants.ERROR_STATUS))
                .map(val -> Integer.parseInt(val.toString())).orElse(500);
        if (errorCode == HttpServletResponse.SC_NOT_FOUND) {
            log.debug("Validating the resource does not exist for all users");
            ResourceResolver adminResolver = null;
            try {
                adminResolver = factory.getServiceResourceResolver(
                        Collections.singletonMap(ResourceResolverFactory.SUBSERVICE, SERVICE_USER_NAME));
                Resource pResource = adminResolver.resolve(slingRequest, slingRequest.getResource().getPath());
                if (!CMSUtils.isPublished(pResource) || pResource.isResourceType(Resource.RESOURCE_TYPE_NON_EXISTING)) {
                    errorCode = HttpServletResponse.SC_NOT_FOUND;
                } else if (UserConstants.DEFAULT_ANONYMOUS_ID.equals(resolver.getUserID())) {
                    errorCode = HttpServletResponse.SC_UNAUTHORIZED;
                } else {
                    errorCode = HttpServletResponse.SC_FORBIDDEN;
                }
            } catch (LoginException e) {
                log.error("Exception retrieving service user", e);
            } finally {
                if (adminResolver != null) {
                    adminResolver.close();
                }
            }
        }
        return errorCode;
    }