Author: markt
Date: Thu Jan 10 12:09:13 2013
New Revision: 1431309

URL: http://svn.apache.org/viewvc?rev=1431309&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=54387
Multiple servlets may not be mapped to the same url-pattern

Modified:
    tomcat/tc7.0.x/trunk/   (props changed)
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/deploy/LocalStrings.properties
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/deploy/WebXml.java
    tomcat/tc7.0.x/trunk/test/org/apache/catalina/deploy/TestWebXml.java
    tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml

Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
  Merged /tomcat/trunk:r1431308

Modified: 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/deploy/LocalStrings.properties
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/deploy/LocalStrings.properties?rev=1431309&r1=1431308&r2=1431309&view=diff
==============================================================================
--- 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/deploy/LocalStrings.properties 
(original)
+++ 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/deploy/LocalStrings.properties 
Thu Jan 10 12:09:13 2013
@@ -22,6 +22,7 @@ webXml.duplicateMessageDestination=Dupli
 webXml.duplicateMessageDestinationRef=Duplicate message-destination-ref name 
[{0}]
 webXml.duplicateResourceEnvRef=Duplicate resource-env-ref name [{0}]
 webXml.duplicateResourceRef=Duplicate resource-ref name [{0}]
+webXml.duplicateServletMapping=The servlets named [{0}] and [{1}] are both 
mapped to the url-pattern [{2}] which is not permitted
 webXml.duplicateTaglibUri=Duplicate tag library URI [{0}]
 webXml.reservedName=A web.xml file was detected using a reserved name [{0}]. 
The name element will be ignored for this fragment.
 webXml.mergeConflictDisplayName=The display name was defined in multiple 
fragments with different values including fragment with name [{0}] located at 
[{1}]

Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/deploy/WebXml.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/deploy/WebXml.java?rev=1431309&r1=1431308&r2=1431309&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/deploy/WebXml.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/deploy/WebXml.java Thu Jan 10 
12:09:13 2013
@@ -328,7 +328,14 @@ public class WebXml {
     private Map<String,String> servletMappings = new HashMap<String,String>();
     private Set<String> servletMappingNames = new HashSet<String>();
     public void addServletMapping(String urlPattern, String servletName) {
-        servletMappings.put(urlPattern, servletName);
+        String oldServletName = servletMappings.put(urlPattern, servletName);
+        if (oldServletName != null) {
+            // Duplicate mapping. As per clarification from the Servlet EG,
+            // deployment should fail.
+            throw new IllegalArgumentException(sm.getString(
+                    "webXml.duplicateServletMapping", oldServletName,
+                    servletName, urlPattern));
+        }
         servletMappingNames.add(servletName);
     }
     public Map<String,String> getServletMappings() { return servletMappings; }

Modified: tomcat/tc7.0.x/trunk/test/org/apache/catalina/deploy/TestWebXml.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/deploy/TestWebXml.java?rev=1431309&r1=1431308&r2=1431309&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/test/org/apache/catalina/deploy/TestWebXml.java 
(original)
+++ tomcat/tc7.0.x/trunk/test/org/apache/catalina/deploy/TestWebXml.java Thu 
Jan 10 12:09:13 2013
@@ -219,4 +219,48 @@ public class TestWebXml {
 
         Assert.assertEquals(0, webxml.getPreDestroyMethods().size());
     }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void testBug54387a() {
+        // Multiple servlets may not be mapped to the same url-pattern
+        WebXml webxml = new WebXml();
+        webxml.addServletMapping("/foo", "a");
+        webxml.addServletMapping("/foo", "b");
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void testBug54387b() {
+        // Multiple servlets may not be mapped to the same url-pattern
+        WebXml webxml = new WebXml();
+        WebXml f1 = new WebXml();
+        WebXml f2 = new WebXml();
+
+        HashSet<WebXml> fragments = new HashSet<>();
+        fragments.add(f1);
+        fragments.add(f2);
+
+        f1.addServletMapping("/foo", "a");
+        f2.addServletMapping("/foo", "b");
+
+        webxml.merge(fragments);
+    }
+
+    @Test
+    public void testBug54387c() {
+        // Multiple servlets may not be mapped to the same url-pattern but main
+        // web.xml takes priority
+        WebXml webxml = new WebXml();
+        WebXml f1 = new WebXml();
+        WebXml f2 = new WebXml();
+
+        HashSet<WebXml> fragments = new HashSet<>();
+        fragments.add(f1);
+        fragments.add(f2);
+
+        f1.addServletMapping("/foo", "a");
+        f2.addServletMapping("/foo", "b");
+        webxml.addServletMapping("/foo", "main");
+
+        webxml.merge(fragments);
+    }
 }

Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1431309&r1=1431308&r2=1431309&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Thu Jan 10 12:09:13 2013
@@ -138,6 +138,10 @@
         <code>HttpParser</code> when parsing incorrect HTTP headers. (kkolinko)
       </fix>
       <fix>
+        <bug>54387</bug>: Deployment must fail when multiple servlets are 
mapped
+        to the same url-pattern. (markt)  
+      </fix>
+      <fix>
         <bug>54391</bug>: Provide a value for the
         <code>javax.servlet.context.orderedLibs</code> attribute. (markt) 
       </fix>



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

Reply via email to