Author: markt Date: Mon Nov 4 23:54:37 2013 New Revision: 1538809 URL: http://svn.apache.org/r1538809 Log: Add getClassLoaderResources() support
Modified: tomcat/trunk/java/org/apache/catalina/WebResourceRoot.java tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java tomcat/trunk/java/org/apache/catalina/webresources/StandardRoot.java Modified: tomcat/trunk/java/org/apache/catalina/WebResourceRoot.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/WebResourceRoot.java?rev=1538809&r1=1538808&r2=1538809&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/WebResourceRoot.java (original) +++ tomcat/trunk/java/org/apache/catalina/WebResourceRoot.java Mon Nov 4 23:54:37 2013 @@ -96,7 +96,7 @@ public interface WebResourceRoot extends WebResource getResource(String path); /** - * Obtain the object(s) that represent the resource at the given path. Note + * Obtain the objects that represent the resource at the given path. Note * that the resource at that path may not exist. If the path does not * exist, the WebResource returned will be associated with the main * WebResourceSet. This will include all matches even if the resource would @@ -106,7 +106,7 @@ public interface WebResourceRoot extends * @param path The path for the resource of interest relative to the root * of the web application. It must start with '/'. * - * @return The object that represents the resource at the given path + * @return The objects that represents the resource at the given path */ WebResource[] getResources(String path); @@ -127,6 +127,23 @@ public interface WebResourceRoot extends WebResource getClassLoaderResource(String path); /** + * Obtain the objects that represent the class loader resource at the given + * path. Note that the resource at that path may not exist. If the path does + * not exist, the WebResource returned will be associated with the main + * WebResourceSet. This will include all matches even if the resource would + * not normally be accessible (e.g. because it was overridden by another + * resource) + * + * @param path The path for the class loader resource of interest relative + * to the root of the class loader resources for the web + * application. It must start with '/'. + * + * @return The objects that represents the class loader resources at the + * given path + */ + WebResource[] getClassLoaderResources(String path); + + /** * Obtain the list of the names of all of the files and directories located * in the specified directory. * Modified: tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java?rev=1538809&r1=1538808&r2=1538809&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java (original) +++ tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java Mon Nov 4 23:54:37 2013 @@ -1163,36 +1163,13 @@ public class WebappClassLoader extends U LinkedHashSet<URL> result = new LinkedHashSet<>(); - int jarFilesLength = jarFiles.length; - - // Looking at the repository - // TODO Add support to WebResourceRoot for looking up class loader - // resoucres - WebResource[] webResources = resources.getResources("/WEB-INF/classes/" + name); + WebResource[] webResources = resources.getClassLoaderResources("/" + name); for (WebResource webResource : webResources) { if (webResource.exists()) { result.add(webResource.getURL()); } } - // Looking at the JAR files - synchronized (jarFiles) { - if (openJARs()) { - for (int i = 0; i < jarFilesLength; i++) { - JarEntry jarEntry = jarFiles[i].getJarEntry(name); - if (jarEntry != null) { - try { - String jarFakeUrl = getURI(jarRealFiles[i]).toString(); - jarFakeUrl = "jar:" + jarFakeUrl + "!/" + name; - result.add(new URL(jarFakeUrl)); - } catch (MalformedURLException e) { - // Ignore - } - } - } - } - } - return Collections.enumeration(result); } @@ -2832,17 +2809,18 @@ public class WebappClassLoader extends U if ((entry == null) && (notFoundResources.containsKey(name))) return null; + if (entry == null) { + synchronized (notFoundResources) { + notFoundResources.put(name, name); + } + return null; + } + JarEntry jarEntry = null; synchronized (jarFiles) { try { - if (entry == null) { - synchronized (notFoundResources) { - notFoundResources.put(name, name); - } - return null; - } /* Only cache the binary content if there is some content * available and either: Modified: tomcat/trunk/java/org/apache/catalina/webresources/StandardRoot.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/StandardRoot.java?rev=1538809&r1=1538808&r2=1538809&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/webresources/StandardRoot.java (original) +++ tomcat/trunk/java/org/apache/catalina/webresources/StandardRoot.java Mon Nov 4 23:54:37 2013 @@ -197,6 +197,15 @@ public class StandardRoot extends Lifecy } + @Override + public WebResource[] getClassLoaderResources(String path) { + if (path == null || path.length() == 0 || !path.startsWith("/")) { + throw new IllegalArgumentException(); + } + return getResources("/WEB-INF/classes" + path, true); + } + + protected WebResource getResourceInternal(String path, boolean useClassLoaderResources) { WebResource result = null; @@ -226,12 +235,17 @@ public class StandardRoot extends Lifecy @Override public WebResource[] getResources(String path) { + return getResources(path, false); + } + + private WebResource[] getResources(String path, + boolean useClassLoaderResources) { checkState(); ArrayList<WebResource> result = new ArrayList<>(); for (ArrayList<WebResourceSet> list : allResources) { for (WebResourceSet webResourceSet : list) { - if (!webResourceSet.getClassLoaderOnly()) { + if (useClassLoaderResources || !webResourceSet.getClassLoaderOnly()) { WebResource webResource = webResourceSet.getResource(path); if (webResource.exists()) { result.add(webResource); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org