sandygao 2002/10/04 10:33:19 Modified: java/src/org/apache/xerces/impl/xs/traversers XSAttributeChecker.java Log: Fixing a threading problem. Revision Changes Path 1.19 +10 -12 xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSAttributeChecker.java Index: XSAttributeChecker.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSAttributeChecker.java,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- XSAttributeChecker.java 18 Sep 2002 23:22:15 -0000 1.18 +++ XSAttributeChecker.java 4 Oct 2002 17:33:19 -0000 1.19 @@ -976,6 +976,10 @@ // temprory vector, used to hold the namespace list protected Vector fNamespaceList = new Vector(); + // whether this attribute appeared in the current element + protected boolean[] fSeen = new boolean[ATTIDX_COUNT]; + private static boolean[] fSeenTemp = new boolean[ATTIDX_COUNT]; + // constructor. Sets fErrorReproter and get datatype validators public XSAttributeChecker(XSDHandler schemaHandler) { fSchemaHandler = schemaHandler; @@ -1072,7 +1076,7 @@ Container attrList = oneEle.attrList; // clear the "seen" flag. - attrList.start(); + System.arraycopy(fSeenTemp, 0, fSeen, 0, ATTIDX_COUNT); // traverse all attributes int length = attrs.length; @@ -1133,6 +1137,9 @@ continue; } + // we've seen this attribute + fSeen[oneAttr.valueIndex] = true; + // check the value against the datatype try { // no checking on string needs to be done here. @@ -1181,7 +1188,7 @@ // if the attribute didn't apprear, and // if the attribute is optional with default value, apply it - if (oneAttr.dfltValue != null && !oneAttr.seen) { + if (oneAttr.dfltValue != null && !fSeen[oneAttr.valueIndex]) { //attrValues.put(oneAttr.name, oneAttr.dfltValue); attrValues[oneAttr.valueIndex] = oneAttr.dfltValue; fromDefault |= (1<<oneAttr.valueIndex); @@ -1701,8 +1708,6 @@ public int valueIndex; // the default value of this attribute public Object dfltValue; - // whether this attribute appeared in the current element - public boolean seen; public OneAttr(String name, int dvIndex, int valueIndex, Object dfltValue) { this.name = name; @@ -1741,10 +1746,6 @@ OneAttr[] values; int pos = 0; - void start() { - for (int i = 0; i < pos; i++) - values[i].seen = false; - } } class SmallContainer extends Container { @@ -1760,7 +1761,6 @@ OneAttr get(String key) { for (int i = 0; i < pos; i++) { if (keys[i].equals(key)) { - values[i].seen = true; return values[i]; } } @@ -1780,8 +1780,6 @@ } OneAttr get(String key) { OneAttr ret = (OneAttr)items.get(key); - if (ret != null) - ret.seen = true; return ret; } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]