reapath must be used to determine WEB-INF/classes
[scannotation] / src / main / java / org / scannotation / WarUrlFinder.java
1 package org.scannotation;
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 import java.io.File;
10
11 /**
12  * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
13  * @version $Revision: 1 $
14  */
15 public class WarUrlFinder
16 {
17    public static URL[] findWebInfLibClasspaths(ServletContextEvent servletContextEvent)
18    {
19       ServletContext servletContext = servletContextEvent.getServletContext();
20       return findWebInfLibClasspaths(servletContext);
21    }
22
23    public static URL[] findWebInfLibClasspaths(ServletContext servletContext)
24    {
25       ArrayList<URL> list = new ArrayList<URL>();
26       Set libJars = servletContext.getResourcePaths("/WEB-INF/lib");
27       for (Object jar : libJars)
28       {
29          try
30          {
31             list.add(servletContext.getResource((String) jar));
32          }
33          catch (MalformedURLException e)
34          {
35             throw new RuntimeException(e);
36          }
37       }
38       return list.toArray(new URL[list.size()]);
39    }
40
41    public static URL findWebInfClassesPath(ServletContextEvent servletContextEvent)
42    {
43       ServletContext servletContext = servletContextEvent.getServletContext();
44       return findWebInfClassesPath(servletContext);
45    }
46
47    /**
48     * Find the URL pointing to "/WEB-INF/classes"  This method may not work in conjunction with IteratorFactory
49     * if your servlet container does not extract the /WEB-INF/classes into a real file-based directory
50     *
51     * @param servletContext
52     * @return null if cannot determin /WEB-INF/classes
53     */
54    public static URL findWebInfClassesPath(ServletContext servletContext)
55    {
56       String path = servletContext.getRealPath("/WEB-INF/classes");
57       if (path == null) return null;
58       File fp = new File(path);
59       if (fp.exists() == false) return null;
60       try
61       {
62          return fp.toURL();
63       }
64       catch (MalformedURLException e)
65       {
66          throw new RuntimeException(e);
67       }
68    }
69 }