[PATCH] mods to ApplicationContext's getResourcePaths

"Immanuel, Gidado-Yisa" <[email protected]> Tue, 4 Jun 2002 13:38:18 -0400
Newsgroups gmane.comp.jakarta.watchdog.devel
Message-ID <B7F9A3E3FDDDD11185510000F8BDBBF2054EA110@MCDC-ATL-5>
Crossposting to watchdog-dev as this should be of interest

I've made some modifications to catalina.core.ApplicationContext
to fix a bug reported in bugzilla (don't have the number, bugzilla
is currently unreachable from here...search on ServletContext...has
to do with consecutive '//').  Also, these changes needed to pass a
new test that I recently submitted to watchdog-dev.

The changes are simply:
  1. Return null if input path argument is null (currently, NPE thrown)
  2. Return null if a NamingException occurs in looking up a path
     (all the occurrances of NamingException [I've seen] report
     the error: "resource not found") (current empty set is returned)
  3. Change all occurrances of the pattern "/*" in the input path to "/"

These changes reflect my understanding of the doc for this method.
I send an earlier email on watchdog-dev asking for clarifications:

http://www.mail-archive.com/watchdog-dev%40jakarta.apache.org/msg00358.html

But since I did not receive anything feedback, I just went ahead
and coded to my understanding.

- Gidado

--
To unsubscribe, e-mail:   <mailto:[email protected]>
For additional commands, e-mail: <mailto:[email protected]>
resourcepaths-patch.txt (text/plain, 1.2 KB)
Index: ApplicationContext.java
===================================================================
RCS file: /home/cvspublic/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/ApplicationContext.java,v
retrieving revision 1.37
diff -u -r1.37 ApplicationContext.java
--- ApplicationContext.java	26 Apr 2002 21:18:18 -0000	1.37
+++ ApplicationContext.java	4 Jun 2002 16:07:23 -0000
@@ -690,6 +690,20 @@
      */
     public Set getResourcePaths(String path) {
 
+		// Check and canonicalize path (change '//' to '/')
+		if (path==null)
+			return null;
+		StringBuffer buffer = new StringBuffer(path);
+		int length = buffer.length() - 1;
+		for (int i=0; i<length; i++) {
+			if (buffer.charAt(i)=='/')
+				while (buffer.charAt(i+1) == '/') {
+					buffer.deleteCharAt(i+1);
+					length--;
+				}
+		}
+		path = buffer.toString();
+
         DirContext resources = context.getResources();
         if (resources != null) {
             if (System.getSecurityManager() != null) {
@@ -717,7 +731,7 @@
         try {
             listCollectionPaths(set, resources, path);
         } catch (NamingException e) {
-            ; // Ignore
+			return null;  // likely resource not found
         }
         set.setLocked(true);
         return (set);