73d3372e3b2b7216c862070e17ca04fc943e6524
[scannotation] / src / main / java / org / scannotation / classpath / WarUrlFinder.java
1 package org.scannotation.classpath;
2
3 import javax.servlet.ServletContext;
4 import javax.servlet.ServletContextEvent;
5 import java.net.MalformedURLException;
6 import java.net.URL;
7 import java.util.ArrayList;
8 import java.util.Set;
9
10 /**
11  * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
12  * @version $Revision: 1 $
13  */
14 public class WarUrlFinder
15 {
16    public static URL[] findWebInfLibClasspaths(ServletContextEvent servletContextEvent)
17    {
18       ServletContext servletContext = servletContextEvent.getServletContext();
19       return findWebInfLibClasspaths(servletContext);
20    }
21
22    public static URL[] findWebInfLibClasspaths(ServletContext servletContext)
23    {
24       ArrayList<URL> list = new ArrayList<URL>();
25       Set libJars = servletContext.getResourcePaths("/WEB-INF/lib");
26       for (Object jar : libJars)
27       {
28          try
29          {
30             list.add(servletContext.getResource((String) jar));
31          }
32          catch (MalformedURLException e)
33          {
34             throw new RuntimeException(e);
35          }
36       }
37       return list.toArray(new URL[list.size()]);
38    }
39
40    public static URL findWebInfClassesPath(ServletContextEvent servletContextEvent)
41    {
42       ServletContext servletContext = servletContextEvent.getServletContext();
43       return findWebInfClassesPath(servletContext);
44    }
45
46    /**
47     * Find the URL pointing to "/WEB-INF/classes"  This method may not work in conjunction with IteratorFactory
48     * if your servlet container does not extract the /WEB-INF/classes into a real file-based directory
49     *
50     * @param servletContext
51     * @return
52     */
53    public static URL findWebInfClassesPath(ServletContext servletContext)
54    {
55       Set libJars = servletContext.getResourcePaths("/WEB-INF/classes");
56       for (Object jar : libJars)
57       {
58          try
59          {
60             URL url = servletContext.getResource((String) jar);
61             String urlString = url.toString();
62             int index = urlString.lastIndexOf("/WEB-INF/classes/");
63             urlString = urlString.substring(0, index + "/WEB-INF/classes/".length());
64             return new URL(urlString);
65          }
66          catch (MalformedURLException e)
67          {
68             throw new RuntimeException(e);
69          }
70       }
71       return null;
72
73    }
74 }