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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]