public static void service()

in src/main/java/org/apache/sling/engine/impl/request/RequestData.java [537:586]


    public static void service(SlingJakartaHttpServletRequest request, SlingJakartaHttpServletResponse response)
            throws IOException, ServletException {

        if (!isValidRequest(
                request.getRequestPathInfo().getResourcePath(),
                request.getRequestPathInfo().getSelectors())) {
            response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Malformed request syntax");
            return;
        }

        RequestData requestData = RequestData.getRequestData(request);
        Servlet servlet = requestData.getContentData().getServlet();
        if (servlet == null) {

            log.warn(
                    "Did not find a servlet to handle the request (path={},selectors={},extension={},suffix={})",
                    request.getRequestPathInfo().getResourcePath(),
                    Arrays.toString(request.getRequestPathInfo().getSelectors()),
                    request.getRequestPathInfo().getExtension(),
                    request.getRequestPathInfo().getSuffix());
            response.sendError(HttpServletResponse.SC_NOT_FOUND, "No Servlet to handle request");

        } else {

            String name = RequestUtil.getServletName(servlet);

            // verify the number of service calls in this request
            if (requestData.hasServletMaxCallCount(request)) {
                throw new TooManyCallsException(name);
            }

            // replace the current servlet name in the request
            Object oldValue = request.getAttribute(SLING_CURRENT_SERVLET_NAME);
            request.setAttribute(SLING_CURRENT_SERVLET_NAME, name);

            // setup the tracker for this service call
            String timerName = name + "#" + requestData.servletCallCounter;
            requestData.servletCallCounter++;
            requestData.getRequestProgressTracker().startTimer(timerName);

            String prevServletName = requestData.setActiveServletName(name);
            try {
                servlet.service(request, response);
            } finally {
                requestData.setActiveServletName(prevServletName);
                request.setAttribute(SLING_CURRENT_SERVLET_NAME, oldValue);
                requestData.getRequestProgressTracker().logTimer(timerName);
            }
        }
    }