Author: markt
Date: Mon Jan  7 18:52:35 2013
New Revision: 1429956

URL: http://svn.apache.org/viewvc?rev=1429956&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=54262
An empty <absolute-ordering /> should turn off all web-fragments. Based on a 
patch by  Violeta Georgieva.

Added:
    tomcat/tc7.0.x/trunk/test/webapp-3.0-fragments-empty-absolute-ordering/
      - copied from r1429946, 
tomcat/trunk/test/webapp-3.0-fragments-empty-absolute-ordering/
Modified:
    tomcat/tc7.0.x/trunk/   (props changed)
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/deploy/WebXml.java
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/WebRuleSet.java
    tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestContextConfig.java
    tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml

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

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=1429956&r1=1429955&r2=1429956&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 Mon Jan  7 
18:52:35 2013
@@ -76,16 +76,17 @@ public class WebXml {
     // web.xml only elements
     // Absolute Ordering
     private Set<String> absoluteOrdering = null;
-    public void addAbsoluteOrdering(String fragmentName) {
+    public void createAbsoluteOrdering() {
         if (absoluteOrdering == null) {
             absoluteOrdering = new LinkedHashSet<String>();
         }
+    }
+    public void addAbsoluteOrdering(String fragmentName) {
+        createAbsoluteOrdering();
         absoluteOrdering.add(fragmentName);
     }
     public void addAbsoluteOrderingOthers() {
-        if (absoluteOrdering == null) {
-            absoluteOrdering = new LinkedHashSet<String>();
-        }
+        createAbsoluteOrdering();
         absoluteOrdering.add(ORDER_OTHERS);
     }
     public Set<String> getAbsoluteOrdering() {

Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/WebRuleSet.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/WebRuleSet.java?rev=1429956&r1=1429955&r2=1429956&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/WebRuleSet.java 
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/WebRuleSet.java Mon 
Jan  7 18:52:35 2013
@@ -1131,6 +1131,12 @@ final class AbsoluteOrderingRule extends
                     "webRuleSet.absoluteOrderingCount"));
         } else {
             isAbsoluteOrderingSet = true;
+            WebXml webXml = (WebXml) digester.peek();
+            webXml.createAbsoluteOrdering();
+            if (digester.getLogger().isDebugEnabled()) {
+                digester.getLogger().debug(
+                        webXml.getClass().getName() + 
".setAbsoluteOrdering()");
+            }
         }
     }
 }

Modified: 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestContextConfig.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestContextConfig.java?rev=1429956&r1=1429955&r2=1429956&view=diff
==============================================================================
--- 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestContextConfig.java 
(original)
+++ 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestContextConfig.java 
Mon Jan  7 18:52:35 2013
@@ -29,11 +29,7 @@ import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import junit.framework.Assert;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
+import org.junit.Assert;
 import org.junit.Test;
 
 import org.apache.catalina.core.StandardContext;
@@ -67,15 +63,7 @@ public class TestContextConfig extends T
 
         tomcat.start();
 
-        ByteChunk res = new ByteChunk();
-
-        int rc =getUrl("http://localhost:"; + getPort() + "/test", res, null);
-
-        // Check return code
-        assertEquals(HttpServletResponse.SC_OK, rc);
-
-        // Check context
-        assertEquals("OK - Custom default Servlet", res.toString());
+        assertPageContains("/test", "OK - Custom default Servlet");
     }
 
     @Test
@@ -88,12 +76,7 @@ public class TestContextConfig extends T
 
         tomcat.start();
 
-        ByteChunk bc = new ByteChunk();
-        int rc = getUrl("http://localhost:"; + getPort() +
-                "/test/bug51396.jsp", bc, null);
-
-        assertEquals(HttpServletResponse.SC_OK, rc);
-        assertTrue(bc.toString().contains("<p>OK</p>"));
+        assertPageContains("/test/bug51396.jsp", "<p>OK</p>");
     }
 
     @Test
@@ -105,15 +88,22 @@ public class TestContextConfig extends T
 
         tomcat.start();
 
-        ByteChunk res = new ByteChunk();
+        assertPageContains("/test/bug53574", "OK");
+    }
+
+    @Test
+    public void testBug54262() throws Exception {
+        Tomcat tomcat = getTomcatInstance();
 
-        int rc = getUrl("http://localhost:"; + getPort() +
-                "/test/bug53574", res, null);
+        File appDir = new 
File("test/webapp-3.0-fragments-empty-absolute-ordering");
+        tomcat.addWebapp(null, "/test", appDir.getAbsolutePath());
 
-        Assert.assertEquals(HttpServletResponse.SC_OK, rc);
+        tomcat.start();
 
-        String body = res.toString();
-        Assert.assertTrue(body.contains("OK"));
+        assertPageContains("/test/resourceA.jsp",
+                "resourceA.jsp in resources.jar");
+        assertPageContains("/test/resources/HelloWorldExample",
+                null, HttpServletResponse.SC_NOT_FOUND);
     }
 
     private static class CustomDefaultServletSCI
@@ -146,4 +136,22 @@ public class TestContextConfig extends T
             resp.getWriter().print("OK - Custom default Servlet");
         }
     }
+
+    private void assertPageContains(String pageUrl, String expectedBody)
+            throws IOException {
+        assertPageContains(pageUrl, expectedBody, HttpServletResponse.SC_OK);
+    }
+
+    private void assertPageContains(String pageUrl, String expectedBody,
+            int expectedStatus) throws IOException {
+        ByteChunk res = new ByteChunk();
+        int sc = getUrl("http://localhost:"; + getPort() + pageUrl, res, null);
+
+        Assert.assertEquals(expectedStatus, sc);
+
+        if (expectedStatus == HttpServletResponse.SC_OK) {
+            String result = res.toString();
+            Assert.assertTrue(result, result.indexOf(expectedBody) > -1);
+        }
+    }
 }

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=1429956&r1=1429955&r2=1429956&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Mon Jan  7 18:52:35 2013
@@ -93,6 +93,12 @@
         first WebSocket message from the client to the server. (markt)
       </add>
       <fix>
+        <bug>54262</bug>: Ensure that an empty
+        <code>&lt;absolute-ordering /&gt;</code> element in the main web.xml
+        file disables scanning for web fragments. Based on a patch by  Violeta
+        Georgieva. (markt) 
+      </fix>
+      <fix>
         <bug>54371</bug>: Prevent exceptions when processing web fragments for
         unexpanded WAR files when the context path contains characters that
         need to be encoded in URLs such as spaces. Patch provided by Polina



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

Reply via email to