You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2012/11/01 19:13:21 UTC

svn commit: r1404704 - in /tomcat/trunk: java/org/apache/catalina/deploy/WebXml.java test/org/apache/catalina/deploy/TestWebXmlOrdering.java

Author: markt
Date: Thu Nov  1 18:13:20 2012
New Revision: 1404704

URL: http://svn.apache.org/viewvc?rev=1404704&view=rev
Log:
Handle case where relative ordering refers top fragments that are not present in the application

Modified:
    tomcat/trunk/java/org/apache/catalina/deploy/WebXml.java
    tomcat/trunk/test/org/apache/catalina/deploy/TestWebXmlOrdering.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=1404704&r1=1404703&r2=1404704&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/deploy/WebXml.java (original)
+++ tomcat/trunk/java/org/apache/catalina/deploy/WebXml.java Thu Nov  1 18:13:20 2012
@@ -2123,14 +2123,29 @@ public class WebXml {
             // Stage 1. Make all dependencies bi-directional - this makes the
             //          next stage simpler.
             for (WebXml fragment : fragments.values()) {
-                for (String before : fragment.getBeforeOrdering()) {
-                    if (!before.equals(ORDER_OTHERS)) {
-                        fragments.get(before).addAfterOrdering(fragment.getName());
+                Iterator<String> before =
+                        fragment.getBeforeOrdering().iterator();
+                while (before.hasNext()) {
+                    String beforeEntry = before.next();
+                    if (!beforeEntry.equals(ORDER_OTHERS)) {
+                        WebXml beforeFragment = fragments.get(beforeEntry);
+                        if (beforeFragment == null) {
+                            before.remove();
+                        } else {
+                            beforeFragment.addAfterOrdering(fragment.getName());
+                        }
                     }
                 }
-                for (String after : fragment.getAfterOrdering()) {
-                    if (!after.equals(ORDER_OTHERS)) {
-                        fragments.get(after).addBeforeOrdering(fragment.getName());
+                Iterator<String> after = fragment.getAfterOrdering().iterator();
+                while (after.hasNext()) {
+                    String afterEntry = after.next();
+                    if (!afterEntry.equals(ORDER_OTHERS)) {
+                        WebXml afterFragment = fragments.get(afterEntry);
+                        if (afterFragment == null) {
+                            after.remove();
+                        } else {
+                            afterFragment.addBeforeOrdering(fragment.getName());
+                        }
                     }
                 }
             }

Modified: tomcat/trunk/test/org/apache/catalina/deploy/TestWebXmlOrdering.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/deploy/TestWebXmlOrdering.java?rev=1404704&r1=1404703&r2=1404704&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/deploy/TestWebXmlOrdering.java (original)
+++ tomcat/trunk/test/org/apache/catalina/deploy/TestWebXmlOrdering.java Thu Nov  1 18:13:20 2012
@@ -330,6 +330,11 @@ public class TestWebXmlOrdering {
         doRelativeOrderingTest(new RelativeTestRunner10());
     }
 
+    @Test
+    public void testOrderWebFragmentsRelative11() {
+        // Test references to non-existant fragments
+        doRelativeOrderingTest(new RelativeTestRunner11());
+    }
 
     @Test(expected=IllegalArgumentException.class)
     public void testOrderWebFragmentsrelativeCircular1() {
@@ -673,4 +678,23 @@ public class TestWebXmlOrdering {
             assertTrue(order, posC > posB);
         }
     }
+
+    private class RelativeTestRunner11 implements RelativeOrderingTestRunner {
+
+        @Override
+        public void init() {
+            a.addAfterOrdering("b");
+            b.addAfterOrdering("z");
+            b.addBeforeOrdering("y");
+        }
+
+        @Override
+        public void validate(String order) {
+            // There is some duplication in the tests below - it is easier to
+            // check the tests are complete this way.
+
+            // a.addAfterOrdering("b");
+            assertTrue(order, posA > posB);
+        }
+    }
 }



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