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]