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><absolute-ordering /></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