Search in sources :

Example 1 with JspFactoryHandler

use of org.apache.sling.scripting.jsp.jasper.compiler.JspRuntimeContext.JspFactoryHandler in project sling by apache.

the class JspScriptEngineFactory method callErrorPageJsp.

/**
     * Call the error page
     * @param bindings The bindings
     * @param scriptHelper Script helper service
     * @param context The script context
     * @param scriptName The name of the script
     */
private void callErrorPageJsp(final Bindings bindings, final SlingScriptHelper scriptHelper, final ScriptContext context, final String scriptName) {
    final SlingBindings slingBindings = new SlingBindings();
    slingBindings.putAll(bindings);
    ResourceResolver resolver = (ResourceResolver) context.getAttribute(SlingScriptConstants.ATTR_SCRIPT_RESOURCE_RESOLVER, SlingScriptConstants.SLING_SCOPE);
    if (resolver == null) {
        resolver = scriptHelper.getScript().getScriptResource().getResourceResolver();
    }
    final SlingIOProvider io = this.ioProvider;
    final JspFactoryHandler jspfh = this.jspFactoryHandler;
    // abort if JSP Support is shut down concurrently (SLING-2704)
    if (io == null || jspfh == null) {
        logger.warn("callJsp: JSP Script Engine seems to be shut down concurrently; not calling {}", scriptHelper.getScript().getScriptResource().getPath());
        return;
    }
    final ResourceResolver oldResolver = io.setRequestResourceResolver(resolver);
    jspfh.incUsage();
    try {
        final JspServletWrapper errorJsp = getJspWrapper(scriptName, slingBindings);
        errorJsp.service(slingBindings);
        // The error page could be inside an include.
        final SlingHttpServletRequest request = slingBindings.getRequest();
        final Throwable t = (Throwable) request.getAttribute("javax.servlet.jsp.jspException");
        final Object newException = request.getAttribute("javax.servlet.error.exception");
        // t==null means the attribute was not set.
        if ((newException != null) && (newException == t)) {
            request.removeAttribute("javax.servlet.error.exception");
        }
        // now clear the error code - to prevent double handling.
        request.removeAttribute("javax.servlet.error.status_code");
        request.removeAttribute("javax.servlet.error.request_uri");
        request.removeAttribute("javax.servlet.error.status_code");
        request.removeAttribute("javax.servlet.jsp.jspException");
    } finally {
        jspfh.decUsage();
        io.resetRequestResourceResolver(oldResolver);
    }
}
Also used : JspServletWrapper(org.apache.sling.scripting.jsp.jasper.servlet.JspServletWrapper) SlingBindings(org.apache.sling.api.scripting.SlingBindings) JspFactoryHandler(org.apache.sling.scripting.jsp.jasper.compiler.JspRuntimeContext.JspFactoryHandler) ResourceResolver(org.apache.sling.api.resource.ResourceResolver) SlingHttpServletRequest(org.apache.sling.api.SlingHttpServletRequest)

Example 2 with JspFactoryHandler

use of org.apache.sling.scripting.jsp.jasper.compiler.JspRuntimeContext.JspFactoryHandler in project sling by apache.

the class JspScriptEngineFactory method callJsp.

/**
     * Call a JSP script
     * @param bindings The bindings
     * @param scriptHelper Script helper service
     * @param context The script context
     * @throws SlingServletException
     * @throws SlingIOException
     */
private void callJsp(final Bindings bindings, final SlingScriptHelper scriptHelper, final ScriptContext context) {
    ResourceResolver resolver = (ResourceResolver) context.getAttribute(SlingScriptConstants.ATTR_SCRIPT_RESOURCE_RESOLVER, SlingScriptConstants.SLING_SCOPE);
    if (resolver == null) {
        resolver = scriptHelper.getScript().getScriptResource().getResourceResolver();
    }
    final SlingIOProvider io = this.ioProvider;
    final JspFactoryHandler jspfh = this.jspFactoryHandler;
    // abort if JSP Support is shut down concurrently (SLING-2704)
    if (io == null || jspfh == null) {
        logger.warn("callJsp: JSP Script Engine seems to be shut down concurrently; not calling {}", scriptHelper.getScript().getScriptResource().getPath());
        return;
    }
    final ResourceResolver oldResolver = io.setRequestResourceResolver(resolver);
    jspfh.incUsage();
    try {
        final SlingBindings slingBindings = new SlingBindings();
        slingBindings.putAll(bindings);
        final JspServletWrapper jsp = getJspWrapper(scriptHelper, slingBindings);
        // create a SlingBindings object
        jsp.service(slingBindings);
    } finally {
        jspfh.decUsage();
        io.resetRequestResourceResolver(oldResolver);
    }
}
Also used : JspServletWrapper(org.apache.sling.scripting.jsp.jasper.servlet.JspServletWrapper) SlingBindings(org.apache.sling.api.scripting.SlingBindings) JspFactoryHandler(org.apache.sling.scripting.jsp.jasper.compiler.JspRuntimeContext.JspFactoryHandler) ResourceResolver(org.apache.sling.api.resource.ResourceResolver)

Aggregations

ResourceResolver (org.apache.sling.api.resource.ResourceResolver)2 SlingBindings (org.apache.sling.api.scripting.SlingBindings)2 JspFactoryHandler (org.apache.sling.scripting.jsp.jasper.compiler.JspRuntimeContext.JspFactoryHandler)2 JspServletWrapper (org.apache.sling.scripting.jsp.jasper.servlet.JspServletWrapper)2 SlingHttpServletRequest (org.apache.sling.api.SlingHttpServletRequest)1