Author: markt
Date: Mon Dec  1 14:54:51 2014
New Revision: 1642697

URL: http://svn.apache.org/r1642697
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=57190
Fix ServletContext.getContext() when parallel deployment is in use.

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=1642697&r1=1642696&r2=1642697&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java Mon Dec  
1 14:54:51 2014
@@ -253,16 +253,30 @@ public class ApplicationContext
 
         Context child = null;
         try {
-            Host host = (Host) context.getParent();
-            String mapuri = uri;
-            while (true) {
-                child = (Context) host.findChild(mapuri);
-                if (child != null)
-                    break;
-                int slash = mapuri.lastIndexOf('/');
-                if (slash < 0)
-                    break;
-                mapuri = mapuri.substring(0, slash);
+            // Look for an exact match
+            Container host = context.getParent();
+            child = (Context) host.findChild(uri);
+
+            // Remove any version information and use the mapper
+            if (child == null) {
+                int i = uri.indexOf("##");
+                if (i > -1) {
+                    uri = uri.substring(0, i);
+                }
+                // Note: This could be more efficient with a dedicated Mapper
+                //       method but such an implementation would require some
+                //       refactoring of the Mapper to avoid copy/paste of
+                //       existing code.
+                MessageBytes hostMB = MessageBytes.newInstance();
+                hostMB.setString(host.getName());
+
+                MessageBytes pathMB = MessageBytes.newInstance();
+                pathMB.setString(uri);
+
+                MappingData mappingData = new MappingData();
+                ((Engine) 
host.getParent()).getService().getMapper().map(hostMB, pathMB, null, 
mappingData);
+
+                child = mappingData.context;
             }
         } catch (Throwable t) {
             ExceptionUtils.handleThrowable(t);

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=1642697&r1=1642696&r2=1642697&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/core/TestApplicationContext.java 
(original)
+++ tomcat/trunk/test/org/apache/catalina/core/TestApplicationContext.java Mon 
Dec  1 14:54:51 2014
@@ -194,12 +194,10 @@ public class TestApplicationContext exte
         String body = res.toString();
 
         Assert.assertTrue(body, body.contains("01-bar"));
-        // TODO This should pass once the bug is fixed
-        // Assert.assertTrue(body, body.contains("02-foo2"));
+        Assert.assertTrue(body, body.contains("02-foo2"));
         Assert.assertTrue(body, body.contains("03-foo1"));
         Assert.assertTrue(body, body.contains("04-foo2"));
-        // TODO This should pass once the bug is fixed
-        // Assert.assertTrue(body, body.contains("05-foo2"));
+        Assert.assertTrue(body, body.contains("05-foo2"));
     }
 
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to