private void destroyServlet(final ServiceReference<Servlet> reference) { ServletReg registration; synchronized (this.servletsByReference) { registration = servletsByReference.remove(reference); } if (registration != null) { for(final ServiceRegistration<ResourceProvider<Object>> reg : registration.registrations) { try { reg.unregister(); } catch ( final IllegalStateException ise) { // this might happen on shutdown } } final String name = RequestUtil.getServletName(registration.servlet); logger.debug("unbindServlet: Servlet {} removed", name); try { registration.servlet.destroy(); } catch (Throwable t) { logger.error("unbindServlet: Unexpected problem destroying servlet " + name, t); } } }
@Override protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException { response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); if (!this.accepts(request)) { response.setStatus(SlingHttpServletResponse.SC_NOT_FOUND); response.getWriter().write("{}"); } /* Servlet accepts this request */ RequestUtil.setRequestAttribute(request, REQ_ATTR, true); final String namespace = URLDecoder.decode(PathInfoUtil.getSelector(request, NAME_PROPERTY_SELECTOR_INDEX), "UTF-8"); final RequestDispatcherOptions options = new RequestDispatcherOptions(); options.setReplaceSelectors(AEM_CQ_INCLUDE_SELECTORS); final BufferingResponse bufferingResponse = new BufferingResponse(response); request.getRequestDispatcher(request.getResource(), options).forward(request, bufferingResponse); Gson gson = new Gson(); final JsonObject json = gson.toJsonTree(bufferingResponse.getContents()).getAsJsonObject(); final PropertyNamespaceUpdater propertyNamespaceUpdater = new PropertyNamespaceUpdater(namespace); propertyNamespaceUpdater.accept(json); response.getWriter().write(json.toString()); }
@Override protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException { response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); if (!this.accepts(request)) { response.setStatus(SlingHttpServletResponse.SC_NOT_FOUND); response.getWriter().write(new JSONObject().toString()); } /* Servlet accepts this request */ RequestUtil.setRequestAttribute(request, REQ_ATTR, true); final String namespace = URLDecoder.decode(PathInfoUtil.getSelector(request, NAME_PROPERTY_SELECTOR_INDEX), "UTF-8"); final RequestDispatcherOptions options = new RequestDispatcherOptions(); options.setReplaceSelectors(AEM_CQ_INCLUDE_SELECTORS); final BufferingResponse bufferingResponse = new BufferingResponse(response); request.getRequestDispatcher(request.getResource(), options).forward(request, bufferingResponse); try { final JSONObject json = new JSONObject(bufferingResponse.getContents()); final PropertyNamespaceUpdater propertyNamespaceUpdater = new PropertyNamespaceUpdater(namespace); propertyNamespaceUpdater.accept(json); response.getWriter().write(json.toString()); } catch (JSONException e) { log.error("Error composing the cqinclude JSON representation of the widget overlay for [ {} ]", request.getRequestURI(), e); response.setStatus(SlingHttpServletResponse.SC_INTERNAL_SERVER_ERROR); response.getWriter().write(new JSONObject().toString()); } }
/** * @see org.apache.sling.api.servlets.ServletResolver#resolveServlet(org.apache.sling.api.resource.Resource, java.lang.String) */ @Override public Servlet resolveServlet(final Resource resource, final String scriptName) { if ( resource == null ) { throw new IllegalArgumentException("Resource must not be null"); } if (LOGGER.isDebugEnabled()) { LOGGER.debug("resolveServlet called for resource {} with script name {}", resource, scriptName); } final ResourceResolver scriptResolver = this.getScriptResourceResolver(); final Servlet servlet = resolveServletInternal(null, resource, scriptName, scriptResolver); // log the servlet found if (LOGGER.isDebugEnabled()) { if (servlet != null) { LOGGER.debug("Servlet {} found for resource {} and script name {}", new Object[] {RequestUtil.getServletName(servlet), resource, scriptName}); } else { LOGGER.debug("No servlet found for resource {} and script name {}", resource, scriptName); } } return servlet; }
/** * @see org.apache.sling.api.servlets.ServletResolver#resolveServlet(org.apache.sling.api.resource.ResourceResolver, java.lang.String) */ @Override public Servlet resolveServlet(final ResourceResolver resolver, final String scriptName) { if ( resolver == null ) { throw new IllegalArgumentException("Resource resolver must not be null"); } if (LOGGER.isDebugEnabled()) { LOGGER.debug("resolveServlet called for for script name {}", scriptName); } final ResourceResolver scriptResolver = this.getScriptResourceResolver(); final Servlet servlet = resolveServletInternal(null, (Resource)null, scriptName, scriptResolver); // log the servlet found if (LOGGER.isDebugEnabled()) { if (servlet != null) { LOGGER.debug("Servlet {} found for script name {}", RequestUtil.getServletName(servlet), scriptName); } else { LOGGER.debug("No servlet found for script name {}", scriptName); } } return servlet; }
tracker.logTimer(timerName, "Servlet resolution failed. See log for details"); } else { tracker.logTimer(timerName, "Using servlet {0}", RequestUtil.getServletName(servlet)); LOGGER.debug("Servlet {} found for resource={}", RequestUtil.getServletName(servlet), resource); } else { LOGGER.debug("No servlet found for resource={}", resource);
servlet = this.getServlet(res); if (servlet != null && LOGGER.isDebugEnabled()) { LOGGER.debug("Servlet {} found using absolute resource type {}", RequestUtil.getServletName(servlet), scriptName); LOGGER.debug("getServletInternal returns servlet {}", RequestUtil.getServletName(servlet));
if (scriptServlet != null) { if ( LOGGER.isDebugEnabled() ) { LOGGER.debug("Using cached servlet {}", RequestUtil.getServletName(scriptServlet));
tracker.logTimer(timerName, "Using handler {0}", RequestUtil.getServletName(servlet));
servletName = RequestUtil.getServletName(servlet); tracker.log("Including script {0} for path={1}, type={2}: {3}", script, resource.getPath(), resource.getResourceType(), servletName); servletName = RequestUtil.getServletName(servlet); tracker.log("Including script {0} (ignoring component hierarchy): {1}", script, servletName);
tracker.logTimer(timerName, "Using handler {0}", RequestUtil.getServletName(servlet));