Author: markt
Date: Mon Jan  7 18:44:22 2013
New Revision: 1429946

URL: http://svn.apache.org/viewvc?rev=1429946&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/trunk/test/webapp-3.0-fragments-empty-absolute-ordering/
    tomcat/trunk/test/webapp-3.0-fragments-empty-absolute-ordering/WEB-INF/
    tomcat/trunk/test/webapp-3.0-fragments-empty-absolute-ordering/WEB-INF/lib/
    
tomcat/trunk/test/webapp-3.0-fragments-empty-absolute-ordering/WEB-INF/lib/resources.jar
   (with props)
    
tomcat/trunk/test/webapp-3.0-fragments-empty-absolute-ordering/WEB-INF/web.xml  
 (with props)
Modified:
    tomcat/trunk/java/org/apache/catalina/deploy/WebXml.java
    tomcat/trunk/java/org/apache/catalina/startup/WebRuleSet.java
    tomcat/trunk/test/org/apache/catalina/startup/TestContextConfig.java

Modified: tomcat/trunk/java/org/apache/catalina/deploy/WebXml.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/deploy/WebXml.java?rev=1429946&r1=1429945&r2=1429946&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/deploy/WebXml.java (original)
+++ tomcat/trunk/java/org/apache/catalina/deploy/WebXml.java Mon Jan  7 
18:44:22 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<>();
         }
+    }
+    public void addAbsoluteOrdering(String fragmentName) {
+        createAbsoluteOrdering();
         absoluteOrdering.add(fragmentName);
     }
     public void addAbsoluteOrderingOthers() {
-        if (absoluteOrdering == null) {
-            absoluteOrdering = new LinkedHashSet<>();
-        }
+        createAbsoluteOrdering();
         absoluteOrdering.add(ORDER_OTHERS);
     }
     public Set<String> getAbsoluteOrdering() {

Modified: tomcat/trunk/java/org/apache/catalina/startup/WebRuleSet.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/WebRuleSet.java?rev=1429946&r1=1429945&r2=1429946&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/startup/WebRuleSet.java (original)
+++ tomcat/trunk/java/org/apache/catalina/startup/WebRuleSet.java Mon Jan  7 
18:44:22 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/trunk/test/org/apache/catalina/startup/TestContextConfig.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/startup/TestContextConfig.java?rev=1429946&r1=1429945&r2=1429946&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/startup/TestContextConfig.java 
(original)
+++ tomcat/trunk/test/org/apache/catalina/startup/TestContextConfig.java Mon 
Jan  7 18:44:22 2013
@@ -29,9 +29,6 @@ import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -66,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
@@ -87,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
@@ -104,15 +88,22 @@ public class TestContextConfig extends T
 
         tomcat.start();
 
-        ByteChunk res = new ByteChunk();
+        assertPageContains("/test/bug53574", "OK");
+    }
 
-        int rc = getUrl("http://localhost:"; + getPort() +
-                "/test/bug53574", res, null);
+    @Test
+    public void testBug54262() throws Exception {
+        Tomcat tomcat = getTomcatInstance();
 
-        Assert.assertEquals(HttpServletResponse.SC_OK, rc);
+        File appDir = new 
File("test/webapp-3.0-fragments-empty-absolute-ordering");
+        tomcat.addWebapp(null, "/test", appDir.getAbsolutePath());
 
-        String body = res.toString();
-        Assert.assertTrue(body.contains("OK"));
+        tomcat.start();
+
+        assertPageContains("/test/resourceA.jsp",
+                "resourceA.jsp in resources.jar");
+        assertPageContains("/test/resources/HelloWorldExample",
+                null, HttpServletResponse.SC_NOT_FOUND);
     }
 
     private static class CustomDefaultServletSCI
@@ -145,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);
+        }
+    }
 }

Added: 
tomcat/trunk/test/webapp-3.0-fragments-empty-absolute-ordering/WEB-INF/lib/resources.jar
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/webapp-3.0-fragments-empty-absolute-ordering/WEB-INF/lib/resources.jar?rev=1429946&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
tomcat/trunk/test/webapp-3.0-fragments-empty-absolute-ordering/WEB-INF/lib/resources.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: 
tomcat/trunk/test/webapp-3.0-fragments-empty-absolute-ordering/WEB-INF/web.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/webapp-3.0-fragments-empty-absolute-ordering/WEB-INF/web.xml?rev=1429946&view=auto
==============================================================================
--- 
tomcat/trunk/test/webapp-3.0-fragments-empty-absolute-ordering/WEB-INF/web.xml 
(added)
+++ 
tomcat/trunk/test/webapp-3.0-fragments-empty-absolute-ordering/WEB-INF/web.xml 
Mon Jan  7 18:44:22 2013
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<web-app xmlns="http://java.sun.com/xml/ns/javaee";
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
+                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd";
+  version="3.0"
+  metadata-complete="false">
+
+  <display-name>Tomcat Test Application</display-name>
+  <description>
+     Used as part of the Tomcat unit tests when a full web application is
+     required.
+  </description>
+
+  <absolute-ordering/>
+
+</web-app>
\ No newline at end of file

Propchange: 
tomcat/trunk/test/webapp-3.0-fragments-empty-absolute-ordering/WEB-INF/web.xml
------------------------------------------------------------------------------
    svn:eol-style = native



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

Reply via email to