All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jboss.weld.environment.jetty.EclipseWeldServletHandler Maven / Gradle / Ivy

The newest version!
package org.jboss.weld.environment.jetty;


import javax.servlet.Filter;
import javax.servlet.Servlet;
import javax.servlet.ServletContext;

import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.server.handler.HandlerCollection;
import org.eclipse.jetty.servlet.ServletHandler;
import org.eclipse.jetty.util.resource.Resource;
import org.eclipse.jetty.webapp.WebAppContext;
import org.jboss.weld.environment.servlet.logging.JettyLogger;

/**
 * @author Matija Mazi
 * @author Ales Justin
 * @deprecated As of Jetty 7.2 Weld implements {@link org.eclipse.jetty.servlet.ServletContextHandler.Decorator} to inject servlets and filters
 */
@Deprecated
public class EclipseWeldServletHandler extends ServletHandler {

    private ServletContext sco;
    private JettyWeldInjector injector;

    public EclipseWeldServletHandler(ServletHandler existingHandler, ServletContext servletContext) {
        sco = servletContext;
        setFilters(existingHandler.getFilters());
        setFilterMappings(existingHandler.getFilterMappings());
        setServlets(existingHandler.getServlets());
        setServletMappings(existingHandler.getServletMappings());
    }

    public Servlet customizeServlet(Servlet servlet) throws Exception {
        inject(servlet);
        return servlet;
    }

    public Filter customizeFilter(Filter filter) throws Exception {
        inject(filter);
        return filter;
    }

    protected void inject(Object injectable) {
        if (injector == null) {
            injector = (JettyWeldInjector) sco.getAttribute(AbstractJettyContainer.INJECTOR_ATTRIBUTE_NAME);
        }
        if (injector == null) {
            JettyLogger.LOG.cantFindInjectior(injectable);
        } else {
            injector.inject(injectable);
        }
    }

    protected static void process(WebAppContext wac, boolean startNewHandler) throws Exception {
        EclipseWeldServletHandler wHandler = new EclipseWeldServletHandler(wac.getServletHandler(), wac.getServletContext());
        wac.setServletHandler(wHandler);
        wac.getSecurityHandler().setHandler(wHandler);

        if (startNewHandler) {
            wHandler.start();
        }

        Resource jettyEnv = null;
        Resource webInf = wac.getWebInf();
        if (webInf != null && webInf.exists()) {
            jettyEnv = webInf.addPath("jetty-env.xml");
        }
        if (jettyEnv == null || !(jettyEnv.exists())) {
            JettyLogger.LOG.missingJettyEnvXml();
        }
    }

    public static void process(WebAppContext wac) throws Exception {
        process(wac, false);
    }

    public static void process(ServletContext context) throws Exception {
        WebAppContext wac = WebAppContext.getCurrentWebAppContext();
        if (wac == null) {
            wac = findWAC(context);
        }

        if (wac != null) {
            process(wac, true);
        } else {
            JettyLogger.LOG.cantFindMatchingWebApplicationContext();
        }
    }

    protected static WebAppContext findWAC(ServletContext context) {
        if (context instanceof ContextHandler.Context) {
            ContextHandler.Context sContext = (ContextHandler.Context) context;
            ContextHandler contextHandler = sContext.getContextHandler();
            Handler handler = contextHandler.getHandler();
            if (handler instanceof ServletHandler) {
                ServletHandler servletHandler = (ServletHandler) handler;
                Server server = servletHandler.getServer();
                Handler serverHandler = server.getHandler();
                if (serverHandler instanceof HandlerCollection) {
                    HandlerCollection hc = (HandlerCollection) serverHandler;
                    for (Handler h : hc.getHandlers()) {
                        if (h instanceof WebAppContext) {
                            WebAppContext wac = (WebAppContext) h;
                            if (wac.getServletHandler() == servletHandler) {
                                return wac;
                            }
                        }
                    }
                }
            }
        }
        return null;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy