Author: markt
Date: Sun Dec  4 10:34:35 2005
New Revision: 353884

URL: http://svn.apache.org/viewcvs?rev=353884&view=rev
Log:
Fix bug 13040. getContext() now allows retrieval of an external context that is
a sub-context of the current context.

Modified:
    
tomcat/container/branches/tc4.1.x/catalina/src/share/org/apache/catalina/core/ApplicationContext.java

Modified: 
tomcat/container/branches/tc4.1.x/catalina/src/share/org/apache/catalina/core/ApplicationContext.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/branches/tc4.1.x/catalina/src/share/org/apache/catalina/core/ApplicationContext.java?rev=353884&r1=353883&r2=353884&view=diff
==============================================================================
--- 
tomcat/container/branches/tc4.1.x/catalina/src/share/org/apache/catalina/core/ApplicationContext.java
 (original)
+++ 
tomcat/container/branches/tc4.1.x/catalina/src/share/org/apache/catalina/core/ApplicationContext.java
 Sun Dec  4 10:34:35 2005
@@ -404,8 +404,8 @@
      * obtain <code>RequestDispatcher</code> objects or resources from the
      * context.  The given path must be absolute (beginning with a "/"),
      * and is interpreted based on our virtual host's document root.
-     *
-     * @param uri Absolute URI of a resource on the server
+     * @param uri a <code>String</code> specifying the context path of a web
+     * application in the container.
      */
     public ServletContext getContext(String uri) {
 
@@ -413,26 +413,24 @@
         if ((uri == null) || (!uri.startsWith("/")))
             return (null);
 
-        // Return the current context if requested
-        String contextPath = context.getPath();
-        if (!contextPath.endsWith("/"))
-            contextPath = contextPath + "/";
-
-        if (((contextPath.length() > 1) && (uri.startsWith(contextPath))) ||
-            ((contextPath.equals("/")) && (uri.equals("/")))) {
-            return (this);
-        }
-
-        // Return other contexts only if allowed
-        if (!context.getCrossContext())
-            return (null);
+        // Use the host mapper to match the uri to a context
         try {
             Host host = (Host) context.getParent();
             Context child = host.map(uri);
-            if (child != null)
-                return (child.getServletContext());
-            else
-                return (null);
+            if (child != null) {
+               // Without crossContext, can only return the current context
+                if (context.getCrossContext()) {
+                       return child.getServletContext();
+                } else {
+                       if (context == child) {
+                               return (this);
+                       } else {
+                               return (null);
+                       }
+                }
+            } else {
+               return (null);
+            }
         } catch (Throwable t) {
             return (null);
         }
@@ -1105,28 +1103,6 @@
             }
         }
         parameters = results;
-
-    }
-
-
-    /**
-     * List resource paths (recursively), and store all of them in the given
-     * Set.
-     */
-    private static void listPaths(Set set, DirContext resources, String path)
-        throws NamingException {
-
-        Enumeration childPaths = resources.listBindings(path);
-        while (childPaths.hasMoreElements()) {
-            Binding binding = (Binding) childPaths.nextElement();
-            String name = binding.getName();
-            String childPath = path + "/" + name;
-            set.add(childPath);
-            Object object = binding.getObject();
-            if (object instanceof DirContext) {
-                listPaths(set, resources, childPath);
-            }
-        }
 
     }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to