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]

Reply via email to