From: markt Date: Mon, 20 Jul 2009 21:22:33 +0000 (+0000) Subject: Make sure the duplicateUri flag is reset each time a TLD file is parsed. This was... X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=550a73c6dcab3abe0edf2317dd1271d4505a0dbb;p=tomcat7.0 Make sure the duplicateUri flag is reset each time a TLD file is parsed. This was causing seemly random TCK failures depending on the order the tests were run in. git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@796016 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/java/org/apache/catalina/startup/TldRuleSet.java b/java/org/apache/catalina/startup/TldRuleSet.java index a35969815..c50a0087f 100644 --- a/java/org/apache/catalina/startup/TldRuleSet.java +++ b/java/org/apache/catalina/startup/TldRuleSet.java @@ -88,7 +88,10 @@ public class TldRuleSet extends RuleSetBase { */ public void addRuleInstances(Digester digester) { + // Note the sharing of state between rules TaglibUriRule taglibUriRule = new TaglibUriRule(); + + digester.addRule(prefix + "taglib", new TaglibRule(taglibUriRule)); digester.addRule(prefix + "taglib/uri", taglibUriRule); @@ -100,8 +103,26 @@ public class TldRuleSet extends RuleSetBase { } +/* + * This rule only exists to reset the duplicateUri flag on the TaglibUriRule. + */ +final class TaglibRule extends Rule { + private final TaglibUriRule taglibUriRule; + + public TaglibRule(TaglibUriRule taglibUriRule) { + this.taglibUriRule = taglibUriRule; + } + + public void body(String namespace, String name, String text) + throws Exception { + taglibUriRule.setDuplicateUri(false); + } + +} + final class TaglibUriRule extends Rule { + // This is set to false for each fiel processed by the TaglibRule private boolean duplicateUri; public TaglibUriRule() { @@ -128,7 +149,6 @@ final class TaglibUriRule extends Rule { } } else { // New URI. Add it to known list and carry on - duplicateUri = false; tldConfig.addTaglibUri(text); } } @@ -136,6 +156,11 @@ final class TaglibUriRule extends Rule { public boolean isDuplicateUri() { return duplicateUri; } + + public void setDuplicateUri(boolean duplciateUri) { + this.duplicateUri = duplciateUri; + } + } final class TaglibListenerRule extends Rule {