Author: markt
Date: Thu Nov 1 18:14:14 2012
New Revision: 1404705
URL: http://svn.apache.org/viewvc?rev=1404705&view=rev
Log:
Handle case where relative ordering refers to fragments that are not present in
the application
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/test/org/apache/catalina/deploy/TestWebXmlOrdering.java
Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
Merged /tomcat/trunk:r1404704
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=1404705&r1=1404704&r2=1404705&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 Nov 1
18:14:14 2012
@@ -2133,14 +2133,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/tc7.0.x/trunk/test/org/apache/catalina/deploy/TestWebXmlOrdering.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/deploy/TestWebXmlOrdering.java?rev=1404705&r1=1404704&r2=1404705&view=diff
==============================================================================
---
tomcat/tc7.0.x/trunk/test/org/apache/catalina/deploy/TestWebXmlOrdering.java
(original)
+++
tomcat/tc7.0.x/trunk/test/org/apache/catalina/deploy/TestWebXmlOrdering.java
Thu Nov 1 18:14:14 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: [email protected]
For additional commands, e-mail: [email protected]