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 <a href="mailto:matija.mazi@gmail.com">Matija Mazi</a> * @author <a href="mailto:ales.justin@jboss.org">Ales Justin</a> * @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; } }