Commit d0ed1546 authored by Emmanuel Bourg's avatar Emmanuel Bourg

Imported Upstream version 8.0.0~RC10

parent c354e8d3
......@@ -15,7 +15,7 @@
limitations under the License.
================================================================================
$Id: BUILDING.txt 1492397 2013-06-12 19:49:56Z markt $
$Id: BUILDING.txt 1545078 2013-11-24 21:24:17Z kkolinko $
====================================================
Building The Apache Tomcat @VERSION_MAJOR_MINOR@ Servlet/JSP Container
......@@ -362,6 +362,15 @@ For example:
junit.formatter.usefile=false
4. Optional support is provided for the Cobertura code coverage tool. It
can be enabled using the following property:
test.cobertura=true
* NOTE: Cobertura is licensed under GPL v2 with parts of it being under
Apache License v1.1. See http://cobertura.sf.net for details. Using it
during Tomcat build is optional and is off by default.
(8) Source code checks
......
......@@ -587,4 +587,30 @@ OdCCQTyOitoKXYy2swx9j69Q7YhhBBgRCAAJBQJQ87AzAhsMAAoJEDXNI8ENSY4j
plIA/R4QYFbde0Jw11KjqAr1AkQHaume7p5mv7Vt6I/D2CkUAP9i2PGC8mgArtlP
XDH35tl64G5lNKNum0D8NSGV955R2g==
=gxY8
-----END PGP PUBLIC KEY BLOCK-----
pub 2048R/A7A0233C 2012-02-25 [expires: 2016-02-25]
Key fingerprint = 8B46 CA49 EF48 37B8 C7F2 92DA A54A D08E A7A0 233C
uid Jeremy Boynes <jboynes@apache.org>
sig 3 A7A0233C 2012-02-25 Jeremy Boynes <jboynes@apache.org>
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG/MacGPG2 v2.0.20 (Darwin)
Comment: GPGTools - https://gpgtools.org
mQENBE9JG+EBCADd5EaN9x1+10sWkZLbb/GL2VBkG3IDHxGvr44lo02pWLeREWCq
CUcx+gJrINyj2eWVYa1NGOfUZhDHJ+5mqbJ/FgN8pxXsD6n3naX+WmwR3klw5yIH
Ypkw7XsEP1TRFw/0P7rMGPWTgaDsS0LxNrhzDbdUj4H5lL8YFZcPfTSXapS6r/XK
6q4ceVhHvSrQtC9bOkb8EBqadRav1a45eQzqmbhZ3GaS+vXeGWIlfNGpNzxDr6wb
FjhazhiVYe3bBxQltjmSKct6zNg1f0fUdcAbxXMzfNRVYmApyqy0Aw7vGspRLipZ
hOi+TBeopNHiEtwSxahs8bcZmYlEw75VQ89HABEBAAG0IkplcmVteSBCb3luZXMg
PGpib3luZXNAYXBhY2hlLm9yZz6JAT4EEwECACgFAk9JG+ECGy8FCQeGH4AGCwkI
BwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEKVK0I6noCM8r14IAMPbhDJns1hVgjCs
OFKPtvXiwFmH7IzPLCeEHDrUrkaY+akWYqBsnTsOw97pUC4Lq/ft9e+NnCX1UGg8
W+g8Ml38gN6ifYS4pTp7E67oz+eQTMbyKjtAXH3slN9Pwl4gSgO2jdsHtjjxQZS6
Vg+gVrG6piTmK7onDye89PFiMk07wXq6CQ/+zLyoXdpi1D86l1VMB2Sx+FNZ+z05
oVxU8tJXyIWrEazPIMDfzWwzyW1qsEzo8Ze4g8fLgCtiPJhSpFaPId12+AkUbk4+
QCuUl/v3Zly66jThcNS/U6S9VXBtQRxDZtkL8pSzmJxaFvvnZgkQ/hlvJ8f9ccS7
2/KQU94=
=yvcP
-----END PGP PUBLIC KEY BLOCK-----
Apache Tomcat
Copyright 1999-2013 The Apache Software Foundation
This product includes software developed by
This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).
The Windows Installer is built with the Nullsoft
......
......@@ -20,17 +20,21 @@ but possibly 7.1.x).
1. Refactor the TLD parsing. TLDs are currently parsed twice. Once by Catalina
looking for listeners and once by Jasper.
- Complete
2. Refactor the XML parsing (org.apache.tomcat.util.xml ?) to remove duplicate
XML parsing code in Catalina and Jasper such as the entity resolvers used
for validation.
- Complete
3. TLDs may have a many to many relationship between URIs and TLD files. This
can result in the same TLD file being parsed many times. Refactor the
TldLocationCache to cache the parsed nodes (will need to check for changes
to TLD files).
- Complete
4. TLD files should be included in the dependencies for JSP and Tag files.
- Complete
5. Run the unused code detector and remove everything that isn't currently used.
Add deprecation markers for the removed code to Tomcat 7.0.x
......@@ -41,6 +45,7 @@ but possibly 7.1.x).
7. Rip out all the JNDI code in resource handling and replace it with straight
URLs (File or WAR).
- Complete
kkolinko: I think this proposal goes too far. There are several
separate issues. There are:
......@@ -190,14 +195,17 @@ but possibly 7.1.x).
8. Review the connector shutdown code for timing and threading issues
particularly any that may result in a client socket being left open after a
connector.stop().
- Complete.
9. Remove the svn keywords from all the files. (Just Java files?)
10. Code to the interfaces in the o.a.catalina package and avoid coding directly
to implementations in other packages. This is likely to require a lot of
work. Maybe use Structure 101 (or similar) to help.
- Partially complete - probably as far as is practical.
11. Merge Service and Engine
- Decided not to do this.
12. Java 7 updates
- Use of <> operator where possible
......
......@@ -21,7 +21,7 @@
# modules that Tomcat depends on. Copy this file to "build.properties"
# in the top-level source directory, and customize it as needed.
#
# $Id: build.properties.default 1532762 2013-10-16 13:46:58Z markt $
# $Id: build.properties.default 1552353 2013-12-19 16:57:18Z markt $
# -----------------------------------------------------------------------------
# ----- Version Control Flags -----
......@@ -29,7 +29,7 @@ version.major=8
version.minor=0
version.build=0
version.patch=0
version.suffix=-RC5
version.suffix=-RC10
# ----- Build control flags -----
# Note enabling validation uses Checkstyle which is LGPL licensed
......@@ -43,6 +43,9 @@ test.haltonfailure=false
# Activate AccessLog during testing
test.accesslog=false
# Note the Cobertura code coverage tool is GPLv2 licensed
test.cobertura=false
# Workaround against http://bugs.sun.com/view_bug.do?bug_id=6202721
test.jvmarg.egd=-Djava.security.egd=file:/dev/./urandom
......@@ -124,8 +127,8 @@ wsdl4j-lib.loc=${base-maven.loc}/wsdl4j/wsdl4j/${wsdl4j-lib.version}/wsdl4j-${ws
wsdl4j-lib.jar=${wsdl4j-lib.home}/wsdl4j-${wsdl4j-lib.version}.jar
# ----- Eclipse JDT, version 3.2 or later -----#
jdt.version=4.2.2
jdt.release=R-4.2.2-201302041200
jdt.version=4.3.1
jdt.release=R-4.3.1-201309111000
jdt.home=${base.path}/ecj-${jdt.version}
jdt.jar=${jdt.home}/ecj-${jdt.version}.jar
# The download will be moved to the archive area eventually. We are taking care of that in advance.
......@@ -147,26 +150,25 @@ tomcat-native.loc.2=${base-tomcat.loc.2}/tomcat-connectors/native/${tomcat-nativ
tomcat-native.win.1=${base-tomcat.loc.1}/tomcat-connectors/native/${tomcat-native.version}/binaries/tomcat-native-${tomcat-native.version}-win32-bin.zip
tomcat-native.win.2=${base-tomcat.loc.2}/tomcat-connectors/native/${tomcat-native.version}/binaries/tomcat-native-${tomcat-native.version}-win32-bin.zip
# ----- Commons DBCP, version 1.1 or later -----
# ----- Commons DBCP, version 2.0 or later -----
#commons-dbcp.version=1.4
#commons-dbcp.home=${base.path}/commons-dbcp-${commons-dbcp.version}-src
#commons-dbcp-src.loc.1=${base-commons.loc.1}/dbcp/source/commons-dbcp-${commons-dbcp.version}-src.tar.gz
#commons-dbcp-src.loc.2=${base-commons.loc.2}/dbcp/source/commons-dbcp-${commons-dbcp.version}-src.tar.gz
commons-dbcp.version=2.0-20131011.192659-135
commons-dbcp.version=2.0-20131211.114422-138
commons-dbcp.home=${base.path}/commons-dbcp2-2.0-SNAPSHOT-src
commons-dbcp-src.loc.1=https://repository.apache.org/content/repositories/snapshots/org/apache/commons/commons-dbcp2/2.0-SNAPSHOT/commons-dbcp2-${commons-dbcp.version}-src.tar.gz
commons-dbcp-src.loc.2=https://repository.apache.org/content/repositories/snapshots/org/apache/commons/commons-dbcp2/2.0-SNAPSHOT/commons-dbcp2-${commons-dbcp.version}-src.tar.gz
# ----- Commons Pool, version 1.1 or later -----
#commons-pool.version=1.5.7
#commons-pool.home=${base.path}/commons-pool-${commons-pool.version}-src
#commons-pool-src.loc.1=${base-commons.loc.1}/pool/source/commons-pool-${commons-pool.version}-src.tar.gz
#commons-pool-src.loc.2=${base-commons.loc.2}/pool/source/commons-pool-${commons-pool.version}-src.tar.gz
#Temporary use of snapshots until Commons Pool 2 has its first release
commons-pool.version=2.0-20131011.192519-241
commons-pool.home=${base.path}/commons-pool2-2.0-SNAPSHOT-src
commons-pool-src.loc.1=https://repository.apache.org/content/repositories/snapshots/org/apache/commons/commons-pool2/2.0-SNAPSHOT/commons-pool2-${commons-pool.version}-src.tar.gz
commons-pool-src.loc.2=https://repository.apache.org/content/repositories/snapshots/org/apache/commons/commons-pool2/2.0-SNAPSHOT/commons-pool2-${commons-pool.version}-src.tar.gz
# ----- Commons Pool, version 2.1 or later -----
#commons-pool.version=2.0
#commons-pool.home=${base.path}/commons-pool2-${commons-pool.version}-src
#commons-pool-src.loc.1=${base-commons.loc.1}/pool/source/commons-pool2-${commons-pool.version}-src.tar.gz
#commons-pool-src.loc.2=${base-commons.loc.2}/pool/source/commons-pool2-${commons-pool.version}-src.tar.gz
commons-pool.version=2.1-20131211.110902-1
commons-pool.home=${base.path}/commons-pool2-2.1-SNAPSHOT-src
commons-pool-src.loc.1=https://repository.apache.org/content/repositories/snapshots/org/apache/commons/commons-pool2/2.1-SNAPSHOT/commons-pool2-${commons-pool.version}-src.tar.gz
commons-pool-src.loc.2=https://repository.apache.org/content/repositories/snapshots/org/apache/commons/commons-pool2/2.1-SNAPSHOT/commons-pool2-${commons-pool.version}-src.tar.gz
......@@ -239,5 +241,12 @@ dojo-js.home=${base.path}/dojo-release-1.1.1
dojo-js.loc=http://download.dojotoolkit.org/release-1.1.1/dojo-release-1.1.1.tar.gz
dojo-js.jar=${dojo-js.home}/dojo/dojo.js
# ----- Cobertura code coverage tool -----
cobertura.version=2.0.3
cobertura.home=${base.path}/cobertura-${cobertura.version}
cobertura.jar=${cobertura.home}/cobertura-${cobertura.version}.jar
cobertura.lib=${cobertura.home}/lib
cobertura.loc=${base-sf.loc}/cobertura/cobertura-2.0.3-bin.tar.gz
# ----- JVM settings for unit tests
java.net.preferIPv4Stack=false
\ No newline at end of file
This diff is collapsed.
......@@ -24,7 +24,7 @@
// * Read access to the web application's document root directory
// * Read, write and delete access to the web application's working directory
//
// $Id: catalina.policy 1532506 2013-10-15 20:00:14Z markt $
// $Id: catalina.policy 1542952 2013-11-18 09:02:13Z markt $
// ============================================================================
......@@ -127,7 +127,7 @@ grant codeBase "file:${catalina.home}/lib/-" {
// These permissions are granted by default to all web applications
// In addition, a web application will be given a read FilePermission
// and JndiPermission for all files and directories in its document root.
// for all files and directories in its document root.
grant {
// Required for JNDI lookup of named JDBC DataSource's and
// javamail named MimePart DataSource used to send mail
......
......@@ -91,14 +91,15 @@ shared.loader=
# - Jasper JARs
# - Tomcat JARs
# - Common non-Tomcat JARs
# - Test JARs (JUnit, Cobertura and dependencies)
tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\
bootstrap.jar,commons-daemon.jar,tomcat-juli.jar,\
annotations-api.jar,el-api.jar,jsp-api.jar,servlet-api.jar,websocket-api.jar,\
catalina.jar,catalina-ant.jar,catalina-ha.jar,catalina-storeconfig.jar,\
catalina-tribes.jar,\
jasper-el.jar,ecj-*.jar,\
tomcat-api.jar,tomcat-util.jar,tomcat-coyote.jar,tomcat-dbcp.jar,\
tomcat-jni.jar,tomcat-spdy.jar,\
tomcat-api.jar,tomcat-util.jar,tomcat-util-scan.jar,tomcat-coyote.jar,\
tomcat-dbcp.jar,tomcat-jni.jar,tomcat-spdy.jar,\
tomcat-i18n-en.jar,tomcat-i18n-es.jar,tomcat-i18n-fr.jar,tomcat-i18n-ja.jar,\
tomcat-juli-adapters.jar,catalina-jmx-remote.jar,catalina-ws.jar,\
tomcat-jdbc.jar,\
......@@ -112,7 +113,10 @@ geronimo-spec-jaxrpc*.jar,wsdl4j*.jar,\
ant.jar,ant-junit*.jar,aspectj*.jar,jmx.jar,h2*.jar,hibernate*.jar,httpclient*.jar,\
jmx-tools.jar,jta*.jar,log4j*.jar,mail*.jar,slf4j*.jar,\
xercesImpl.jar,xmlParserAPIs.jar,xml-apis.jar,\
junit.jar,junit-*.jar,ant-launcher.jar
junit.jar,junit-*.jar,ant-launcher.jar,\
cobertura-*.jar,asm-*.jar,dom4j-*.jar,icu4j-*.jar,jaxen-*.jar,jdom-*.jar,\
jetty-*.jar,oro-*.jar,servlet-api-*.jar,tagsoup-*.jar,xmlParserAPIs-*.jar,\
xom-*.jar
# Default list of JAR files that should be scanned that overrides the default
# jarsToSkip list above. This is typically used to include a specific JAR that
......
......@@ -25,8 +25,6 @@
-->
<!--APR library loader. Documentation at /docs/apr.html -->
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
<Listener className="org.apache.catalina.core.JasperListener" />
<!-- Prevent memory leaks due to use of particular java/javax APIs-->
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
......
......@@ -104,10 +104,6 @@
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>gzip</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
......
......@@ -88,9 +88,8 @@ public class ArrayELResolver extends ELResolver {
int idx = coerce(property);
checkBounds(base, idx);
if (value != null &&
!base.getClass().getComponentType().isAssignableFrom(
value.getClass())) {
if (value != null && !Util.isAssignableFrom(value.getClass(),
base.getClass().getComponentType())) {
throw new ClassCastException(Util.message(context,
"objectNotAssignable", value.getClass().getName(),
base.getClass().getComponentType().getName()));
......
......@@ -438,7 +438,7 @@ class Util {
* This method duplicates code in org.apache.el.util.ReflectionUtil. When
* making changes keep the code in sync.
*/
private static boolean isAssignableFrom(Class<?> src, Class<?> target) {
static boolean isAssignableFrom(Class<?> src, Class<?> target) {
// src will always be an object
// Short-cut. null is always assignable to an object and in EL null
// can always be coerced to a valid value for a primitive
......
......@@ -53,6 +53,8 @@ public interface Part {
* this part is not a file upload.
*
* @return the submitted file name or {@code null}.
*
* @since Servlet 3.1
*/
public String getSubmittedFileName();
......
......@@ -29,7 +29,7 @@ import org.apache.catalina.connector.Request;
* provides some sort of authentication service.
*
* @author Craig R. McClanahan
* @version $Id: Authenticator.java 1241162 2012-02-06 20:32:36Z markt $
* @version $Id: Authenticator.java 1546630 2013-11-29 19:23:13Z markt $
*/
public interface Authenticator {
......@@ -51,5 +51,5 @@ public interface Authenticator {
public void login(String userName, String password, Request request)
throws ServletException;
public void logout(Request request) throws ServletException;
public void logout(Request request);
}
......@@ -56,7 +56,7 @@ import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
* <p>
*
* @author Craig R. McClanahan
* @version $Id: Context.java 1513712 2013-08-14 01:54:37Z jboynes $
* @version $Id: Context.java 1549528 2013-12-09 10:01:16Z markt $
*/
public interface Context extends Container {
......@@ -581,35 +581,77 @@ public interface Context extends Container {
/**
* Get the server.xml <context> attribute's xmlNamespaceAware.
* @return true if namespace awareness is enabled.
* Will the parsing of web.xml and web-fragment.xml files for this Context
* be performed by a namespace aware parser?
*
* @return true if namespace awareness is enabled.
*/
public boolean getXmlNamespaceAware();
/**
* Get the server.xml <context> attribute's xmlValidation.
* @return true if validation is enabled.
* Controls whether the parsing of web.xml and web-fragment.xml files for
* this Context will be performed by a namespace aware parser.
*
* @param xmlNamespaceAware true to enable namespace awareness
*/
public void setXmlNamespaceAware(boolean xmlNamespaceAware);
/**
* Will the parsing of web.xml and web-fragment.xml files for this Context
* be performed by a validating parser?
*
* @return true if validation is enabled.
*/
public boolean getXmlValidation();
/**
* Set the validation feature of the XML parser used when
* parsing xml instances.
* @param xmlValidation true to enable xml instance validation
* Controls whether the parsing of web.xml and web-fragment.xml files
* for this Context will be performed by a validating parser.
*
* @param xmlValidation true to enable xml validation
*/
public void setXmlValidation(boolean xmlValidation);
/**
* Set the namespace aware feature of the XML parser used when
* parsing xml instances.
* @param xmlNamespaceAware true to enable namespace awareness
/**
* Will the parsing of web.xml, web-fragment.xml, *.tld, *.jspx, *.tagx and
* tagplugin.xml files for this Context block the use of external entities?
*
* @return true if access to external entities is blocked
*/
public void setXmlNamespaceAware(boolean xmlNamespaceAware);
public boolean getXmlBlockExternal();
/**
* Controls whether the parsing of web.xml, web-fragment.xml, *.tld, *.jspx,
* *.tagx and tagplugin.xml files for this Context will block the use of
* external entities.
*
* @param xmlBlockExternal true to block external entities
*/
public void setXmlBlockExternal(boolean xmlBlockExternal);
/**
* Will the parsing of *.tld files for this Context be performed by a
* validating parser?
*
* @return true if validation is enabled.
*/
public boolean getTldValidation();
/**
* Controls whether the parsing of *.tld files for this Context will be
* performed by a validating parser.
*
* @param tldValidation true to enable xml validation
*/
public void setTldValidation(boolean tldValidation);
/**
* Get the Jar Scanner to be used to scan for JAR resources for this
......
......@@ -14,18 +14,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.catalina;
/**
* Global constants that are applicable to multiple packages within Catalina.
*
* @author Craig R. McClanahan
* @version $Id: Globals.java 1239298 2012-02-01 20:11:26Z markt $
* @version $Id: Globals.java 1549528 2013-12-09 10:01:16Z markt $
*/
public final class Globals {
/**
......@@ -69,8 +65,8 @@ public final class Globals {
/**
* The JNDI directory context which is associated with the context. This
* context can be used to manipulate static files.
* The WebResourceRoot which is associated with the context. This can be
* used to manipulate static files.
*/
public static final String RESOURCES_ATTR =
"org.apache.catalina.resources";
......@@ -273,4 +269,25 @@ public final class Globals {
* the tomcat instance installation path
*/
public static final String CATALINA_BASE_PROP = "catalina.base";
/**
* Name of the ServletContext init-param that determines if the JSP engine
* should validate *.tld files when parsing them.
* <p>
* This must be kept in sync with org.apache.jasper.Constants
*/
public static final String JASPER_XML_VALIDATION_TLD_INIT_PARAM =
"org.apache.jasper.XML_VALIDATE_TLD";
/**
* Name of the ServletContext init-param that determines if the JSP engine
* will block external entities from being used in *.tld, *.jspx, *.tagx and
* tagplugin.xml files.
* <p>
* This must be kept in sync with org.apache.jasper.Constants
*/
public static final String JASPER_XML_BLOCK_EXTERNAL_INIT_PARAM =
"org.apache.jasper.XML_BLOCK_EXTERNAL";
}
......@@ -14,14 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.catalina;
import java.beans.PropertyChangeListener;
/**
* A <b>Loader</b> represents a Java ClassLoader implementation that can
* be used by a Container to load class files (within a repository associated
......@@ -50,15 +46,11 @@ import java.beans.PropertyChangeListener;
* </ul>
*
* @author Craig R. McClanahan
* @version $Id: Loader.java 1401503 2012-10-23 22:38:16Z markt $
* @version $Id: Loader.java 1543228 2013-11-18 23:15:46Z markt $
*/
public interface Loader {
// ------------------------------------------------------------- Properties
/**
* Execute a periodic task, such as reloading, etc. This method will be
* invoked inside the classloading context of this container. Unexpected
......@@ -117,9 +109,6 @@ public interface Loader {
public void setReloadable(boolean reloadable);
// --------------------------------------------------------- Public Methods
/**
* Add a property change listener to this component.
*
......@@ -141,6 +130,4 @@ public interface Loader {
* @param listener The listener to remove
*/
public void removePropertyChangeListener(PropertyChangeListener listener);
}
......@@ -18,6 +18,8 @@ package org.apache.catalina;
import java.io.InputStream;
import java.net.URL;
import java.security.cert.Certificate;
import java.util.jar.Manifest;
/**
* Represents a file or directory within a web application. It borrows heavily
......@@ -139,4 +141,19 @@ public interface WebResource {
* part.
*/
WebResourceRoot getWebResourceRoot();
/**
* Obtain the certificates that were used to sign this resource to verify
* it or @null if none.
*
* @see java.util.jar.JarEntry#getCertificates()
*/
Certificate[] getCertificates();
/**
* Obtain the manifest associated with this resource or @null if none.
*
* @see java.util.jar.JarFile#getManifest()
*/
Manifest getManifest();
}
......@@ -18,6 +18,7 @@ package org.apache.catalina;
import java.io.InputStream;
import java.net.URL;
import java.util.List;
import java.util.Set;
/**
......@@ -96,7 +97,7 @@ public interface WebResourceRoot extends Lifecycle {
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,10 +107,43 @@ public interface WebResourceRoot extends Lifecycle {
* @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);
/**
* Obtain the object that represents the class loader resource at the given
* path. WEB-INF/classes is always searched prior to searching JAR files in
* WEB-INF/lib. The search order for JAR files will be consistent across
* subsequent calls to this method until the web application is reloaded. No
* guarantee is made as to what the search order for JAR files may be.
*
* @param path The path of the class loader resource of interest relative
* to the the root of class loader resources for this web
* application.
*
* @return The object that represents the class loader resource at the
* given path
*/
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
*/