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]