package org.jboss.resteasy.plugins.server.servlet; import org.jboss.resteasy.spi.ResteasyConfiguration; import org.jboss.resteasy.spi.ResteasyDeployment; import javax.servlet.ServletContext; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Enumeration; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; /** * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a> * @version $Revision: 1 $ */ public class ListenerBootstrap extends ConfigurationBootstrap { protected ServletContext servletContext; public ListenerBootstrap(ServletContext servletContext) { this.servletContext = servletContext; } private static Object RD_LOCK = new Object(); @Override public ResteasyDeployment createDeployment() { ResteasyDeployment deployment = (ResteasyDeployment) servletContext.getAttribute(ResteasyDeployment.class.getName()); if (deployment == null) deployment = super.createDeployment(); deployment.getDefaultContextObjects().put(ResteasyDeployment.class, deployment); deployment.getDefaultContextObjects().put(ServletContext.class, servletContext); deployment.getDefaultContextObjects().put(ResteasyConfiguration.class, this); String servletMappingPrefix = getParameter(ResteasyContextParameters.RESTEASY_SERVLET_MAPPING_PREFIX); if (servletMappingPrefix == null) servletMappingPrefix = ""; servletMappingPrefix = servletMappingPrefix.trim(); synchronized (RD_LOCK) { @SuppressWarnings(value = "unchecked") Map<String, ResteasyDeployment> deployments = (Map<String, ResteasyDeployment>) servletContext.getAttribute(ResteasyContextParameters.RESTEASY_DEPLOYMENTS); if (deployments == null) { deployments = new ConcurrentHashMap<String, ResteasyDeployment>(); servletContext.setAttribute("resteasy.deployments", deployments); } deployments.put(servletMappingPrefix, deployment); } return deployment; } public static URL[] findWebInfLibClasspaths(ServletContext servletContext) { ArrayList<URL> list = new ArrayList<URL>(); Set libJars = servletContext.getResourcePaths("/WEB-INF/lib"); if (libJars == null) { URL[] empty = {}; return empty; } for (Object jar : libJars) { try { list.add(servletContext.getResource((String) jar)); } catch (MalformedURLException e) { throw new RuntimeException(e); } } return list.toArray(new URL[list.size()]); } @Override public Set<String> getParameterNames() { return getServletContextNames(); } protected Set<String> getServletContextNames() { Enumeration<String> en = servletContext.getInitParameterNames(); HashSet<String> set = new HashSet<String>(); while (en.hasMoreElements()) set.add(en.nextElement()); return set; } @Override public Set<String> getInitParameterNames() { return getParameterNames(); } public String getParameter(String name) { return servletContext.getInitParameter(name); } @Override public String getInitParameter(String name) { return servletContext.getInitParameter(name); } }