Author: markt
Date: Fri Dec 12 17:40:48 2014
New Revision: 1644989

URL: http://svn.apache.org/r1644989
Log:
Follow on to r1642697.
Only currently running contexts should be returned.
Handle the case where the mapper returns an unwanted  non-exact match.

Modified:
    tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java
    tomcat/trunk/test/org/apache/catalina/core/TestApplicationContext.java

Modified: tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java?rev=1644989&r1=1644988&r2=1644989&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java Fri Dec 
12 17:40:48 2014
@@ -257,6 +257,11 @@ public class ApplicationContext
             Container host = context.getParent();
             child = (Context) host.findChild(uri);
 
+            // Non-running contexts should be ignored.
+            if (!child.getState().isAvailable()) {
+                child = null;
+            }
+
             // Remove any version information and use the mapper
             if (child == null) {
                 int i = uri.indexOf("##");
@@ -276,15 +281,20 @@ public class ApplicationContext
                 MappingData mappingData = new MappingData();
                 ((Engine) 
host.getParent()).getService().getMapper().map(hostMB, pathMB, null, 
mappingData);
 
-                child = mappingData.context;
+                // Must be an exact match. It is no good returning the ROOT
+                // context if the caller is looking for "/something-else"
+                if (mappingData.context.getPath().equals(uri)) {
+                    child = mappingData.context;
+                }
             }
         } catch (Throwable t) {
             ExceptionUtils.handleThrowable(t);
-            return (null);
+            return null;
         }
 
-        if (child == null)
-            return (null);
+        if (child == null) {
+            return null;
+        }
 
         if (context.getCrossContext()) {
             // If crossContext is enabled, can always return the context
@@ -294,7 +304,7 @@ public class ApplicationContext
             return context.getServletContext();
         } else {
             // Nothing to return
-            return (null);
+            return null;
         }
     }
 

Modified: tomcat/trunk/test/org/apache/catalina/core/TestApplicationContext.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/core/TestApplicationContext.java?rev=1644989&r1=1644988&r2=1644989&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/core/TestApplicationContext.java 
(original)
+++ tomcat/trunk/test/org/apache/catalina/core/TestApplicationContext.java Fri 
Dec 12 17:40:48 2014
@@ -200,8 +200,7 @@ public class TestApplicationContext exte
         Assert.assertTrue(body, body.contains("03-foo1"));
         Assert.assertTrue(body, body.contains("04-foo2"));
         Assert.assertTrue(body, body.contains("05-foo2"));
-        // FIXME: Enable this test
-        //Assert.assertTrue(body, body.contains("06-null"));
+        Assert.assertTrue(body, body.contains("06-null"));
     }
 
 



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to