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]