You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by sa...@apache.org on 2002/10/24 00:57:05 UTC

cvs commit: xml-xerces/java/src/org/apache/xerces/impl/xs/traversers XSAttributeChecker.java XSDWildcardTraverser.java

sandygao    2002/10/23 15:57:05

  Modified:    java/src/org/apache/xerces/impl/xs/traversers
                        XSAttributeChecker.java XSDWildcardTraverser.java
  Log:
  Fixing a bug in traversing wildcards: a static value was updated when multiple
  wildcards are traversed, if none of them specifies the "namespace" attribute.
  
  Revision  Changes    Path
  1.20      +17 -13    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.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- XSAttributeChecker.java	4 Oct 2002 17:33:19 -0000	1.19
  +++ XSAttributeChecker.java	23 Oct 2002 22:57:05 -0000	1.20
  @@ -135,6 +135,7 @@
       public static final int ATTIDX_MIXED           = ATTIDX_COUNT++;
       public static final int ATTIDX_NAME            = ATTIDX_COUNT++;
       public static final int ATTIDX_NAMESPACE       = ATTIDX_COUNT++;
  +    public static final int ATTIDX_NAMESPACE_LIST  = ATTIDX_COUNT++;
       public static final int ATTIDX_NILLABLE        = ATTIDX_COUNT++;
       public static final int ATTIDX_PROCESSCONTENTS = ATTIDX_COUNT++;
       public static final int ATTIDX_PUBLIC          = ATTIDX_COUNT++;
  @@ -163,6 +164,9 @@
       private static final XInt INT_ANY_STRICT     = fXIntPool.getXInt(XSWildcardDecl.PC_STRICT);
       private static final XInt INT_ANY_LAX        = fXIntPool.getXInt(XSWildcardDecl.PC_LAX);
       private static final XInt INT_ANY_SKIP       = fXIntPool.getXInt(XSWildcardDecl.PC_SKIP);
  +    private static final XInt INT_ANY_ANY        = fXIntPool.getXInt(XSWildcardDecl.NSCONSTRAINT_ANY);
  +    private static final XInt INT_ANY_LIST       = fXIntPool.getXInt(XSWildcardDecl.NSCONSTRAINT_LIST);
  +    private static final XInt INT_ANY_NOT        = fXIntPool.getXInt(XSWildcardDecl.NSCONSTRAINT_NOT);
       private static final XInt INT_USE_OPTIONAL   = fXIntPool.getXInt(SchemaSymbols.USE_OPTIONAL);
       private static final XInt INT_USE_REQUIRED   = fXIntPool.getXInt(SchemaSymbols.USE_REQUIRED);
       private static final XInt INT_USE_PROHIBITED = fXIntPool.getXInt(SchemaSymbols.USE_PROHIBITED);
  @@ -387,7 +391,7 @@
           allAttrs[ATT_NAMESPACE_D]       =   new OneAttr(SchemaSymbols.ATT_NAMESPACE,
                                                           DT_NAMESPACE,
                                                           ATTIDX_NAMESPACE,
  -                                                        new XSWildcardDecl());
  +                                                        INT_ANY_ANY);
           allAttrs[ATT_NAMESPACE_N]       =   new OneAttr(SchemaSymbols.ATT_NAMESPACE,
                                                           DT_ANYURI,
                                                           ATTIDX_NAMESPACE,
  @@ -1163,7 +1167,7 @@
                       }
                   }
                   else {
  -                    attrValues[oneAttr.valueIndex] = validate(attrName, attrVal, oneAttr.dvIndex, schemaDoc);
  +                    attrValues[oneAttr.valueIndex] = validate(attrValues, attrName, attrVal, oneAttr.dvIndex, schemaDoc);
                   }
               } catch (InvalidDatatypeValueException ide) {
                   reportSchemaError ("s4s-att-invalid-value",
  @@ -1216,7 +1220,7 @@
           return attrValues;
       }
   
  -    private Object validate(String attr, String ivalue, int dvIndex,
  +    private Object validate(Object[] attrValues, String attr, String ivalue, int dvIndex,
                               XSDocumentInfo schemaDoc) throws InvalidDatatypeValueException {
           if (ivalue == null)
               return null;
  @@ -1371,7 +1375,7 @@
                   retValue = INT_UNBOUNDED;
               } else {
                   try {
  -                    retValue = validate(attr, value, DT_NONNEGINT, schemaDoc);
  +                    retValue = validate(attrValues, attr, value, DT_NONNEGINT, schemaDoc);
                   } catch (NumberFormatException e) {
                       throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.3", new Object[]{value, "(nonNegativeInteger | unbounded)"});
                   }
  @@ -1417,18 +1421,19 @@
               break;
           case DT_NAMESPACE:
               // namespace = ((##any | ##other) | List of (anyURI | (##targetNamespace | ##local)) )
  -            XSWildcardDecl wildcard = new XSWildcardDecl();
               if (value.equals(SchemaSymbols.ATTVAL_TWOPOUNDANY)) {
                   // ##any
  +                retValue = INT_ANY_ANY;
               } else if (value.equals(SchemaSymbols.ATTVAL_TWOPOUNDOTHER)) {
                   // ##other
  -                wildcard.fType = XSWildcardDecl.NSCONSTRAINT_NOT;
  -                wildcard.fNamespaceList = new String[2];
  -                wildcard.fNamespaceList[0] = schemaDoc.fTargetNamespace;
  -                wildcard.fNamespaceList[1] = null;
  +                retValue = INT_ANY_NOT;
  +                String[] list = new String[2];
  +                list[0] = schemaDoc.fTargetNamespace;
  +                list[1] = null;
  +                attrValues[ATTIDX_NAMESPACE_LIST] = list;
               } else {
                   // list
  -                wildcard.fType = XSWildcardDecl.NSCONSTRAINT_LIST;
  +                retValue = INT_ANY_LIST;
   
                   fNamespaceList.removeAllElements();
                   
  @@ -1463,10 +1468,9 @@
                   // convert the vector to an array
                   int num = fNamespaceList.size();
                   String[] list = new String[num];
  -                wildcard.fNamespaceList = list;
                   fNamespaceList.copyInto(list);
  +                attrValues[ATTIDX_NAMESPACE_LIST] = list;
               }
  -            retValue = wildcard;
               break;
           case DT_PROCESSCONTENTS:
               // processContents = (lax | skip | strict)
  
  
  
  1.8       +8 -4      xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDWildcardTraverser.java
  
  Index: XSDWildcardTraverser.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDWildcardTraverser.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- XSDWildcardTraverser.java	4 Jul 2002 21:38:34 -0000	1.7
  +++ XSDWildcardTraverser.java	23 Oct 2002 22:57:05 -0000	1.8
  @@ -183,10 +183,14 @@
                                            SchemaGrammar grammar) {
   
           //get all attributes
  -        XSWildcardDecl wildcard = (XSWildcardDecl) attrValues[XSAttributeChecker.ATTIDX_NAMESPACE];
  -        XInt processContentsAttr = (XInt) attrValues[XSAttributeChecker.ATTIDX_PROCESSCONTENTS];
  -
  +        XSWildcardDecl wildcard = new XSWildcardDecl();
  +        // namespace type
  +        XInt namespaceTypeAttr = (XInt) attrValues[XSAttributeChecker.ATTIDX_NAMESPACE];
  +        wildcard.fType = namespaceTypeAttr.shortValue();
  +        // namespace list
  +        wildcard.fNamespaceList = (String[])attrValues[XSAttributeChecker.ATTIDX_NAMESPACE_LIST];
           // process contents
  +        XInt processContentsAttr = (XInt) attrValues[XSAttributeChecker.ATTIDX_PROCESSCONTENTS];
           wildcard.fProcessContents = processContentsAttr.shortValue();
   
           //check content
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org