You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by ne...@apache.org on 2003/06/18 05:09:33 UTC
cvs commit: xml-xerces/java/src/org/apache/xerces/impl/xs/traversers XSDComplexTypeTraverser.java
neilg 2003/06/17 20:09:33
Modified: java/src/org/apache/xerces/impl/xs/traversers
XSDComplexTypeTraverser.java
Log:
pass non-schema attributes of complexType children to the annotation traverser
Revision Changes Path
1.35 +122 -34 xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDComplexTypeTraverser.java
Index: XSDComplexTypeTraverser.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDComplexTypeTraverser.java,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -r1.34 -r1.35
--- XSDComplexTypeTraverser.java 9 May 2003 13:48:50 -0000 1.34
+++ XSDComplexTypeTraverser.java 18 Jun 2003 03:09:33 -0000 1.35
@@ -323,7 +323,7 @@
throws ComplexTypeRecoverableError {
- Object[] attrValues = fAttrChecker.checkAttributes(simpleContentElement, false,
+ Object[] simpleContentAttrValues = fAttrChecker.checkAttributes(simpleContentElement, false,
schemaDoc);
// -----------------------------------------------------------------------
@@ -336,14 +336,14 @@
if (simpleContent != null) {
// traverse annotation if any
if (DOMUtil.getLocalName(simpleContent).equals(SchemaSymbols.ELT_ANNOTATION)) {
- traverseAnnotationDecl(simpleContent, attrValues, false, schemaDoc);
+ traverseAnnotationDecl(simpleContent, simpleContentAttrValues, false, schemaDoc);
simpleContent = DOMUtil.getNextSiblingElement(simpleContent);
}
}
- fAttrChecker.returnAttrArray(attrValues, schemaDoc);
// If there are no children, return
if (simpleContent==null) {
+ fAttrChecker.returnAttrArray(simpleContentAttrValues, schemaDoc);
throw new ComplexTypeRecoverableError("src-ct.0.2",
new Object[]{fName,SchemaSymbols.ELT_SIMPLECONTENT},
simpleContentElement);
@@ -358,28 +358,31 @@
else if (simpleContentName.equals(SchemaSymbols.ELT_EXTENSION))
fDerivedBy = XSConstants.DERIVATION_EXTENSION;
else {
+ fAttrChecker.returnAttrArray(simpleContentAttrValues, schemaDoc);
throw new ComplexTypeRecoverableError("src-ct.0.1",
new Object[]{fName,simpleContentName},
simpleContent);
}
Element elemTmp = DOMUtil.getNextSiblingElement(simpleContent);
if (elemTmp != null) {
+ fAttrChecker.returnAttrArray(simpleContentAttrValues, schemaDoc);
String siblingName = DOMUtil.getLocalName(elemTmp);
throw new ComplexTypeRecoverableError("src-ct.0.1",
new Object[]{fName,siblingName},
elemTmp);
}
- attrValues = fAttrChecker.checkAttributes(simpleContent, false,
+ Object [] derivationTypeAttrValues = fAttrChecker.checkAttributes(simpleContent, false,
schemaDoc);
- QName baseTypeName = (QName) attrValues[XSAttributeChecker.ATTIDX_BASE];
- fAttrChecker.returnAttrArray(attrValues, schemaDoc);
+ QName baseTypeName = (QName) derivationTypeAttrValues[XSAttributeChecker.ATTIDX_BASE];
// -----------------------------------------------------------------------
// Need a base type.
// -----------------------------------------------------------------------
if (baseTypeName==null) {
+ fAttrChecker.returnAttrArray(simpleContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
throw new ComplexTypeRecoverableError("src-ct.0.3",
new Object[]{fName}, simpleContent);
}
@@ -387,8 +390,11 @@
XSTypeDefinition type = (XSTypeDefinition)fSchemaHandler.getGlobalDecl(schemaDoc,
XSDHandler.TYPEDECL_TYPE, baseTypeName,
simpleContent);
- if (type==null)
+ if (type==null) {
+ fAttrChecker.returnAttrArray(simpleContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
throw new ComplexTypeRecoverableError();
+ }
fBaseType = type;
@@ -411,6 +417,8 @@
((XSParticleDecl)baseComplexType.getParticle()).emptiable()) {
}
else {
+ fAttrChecker.returnAttrArray(simpleContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
throw new ComplexTypeRecoverableError("src-ct.2.1",
new Object[]{fName}, simpleContent);
}
@@ -419,6 +427,8 @@
baseValidator = (XSSimpleType)type;
// base is a ST (only extension is OK)
if (fDerivedBy == XSConstants.DERIVATION_RESTRICTION) {
+ fAttrChecker.returnAttrArray(simpleContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
throw new ComplexTypeRecoverableError("src-ct.2.1",
new Object[]{fName}, simpleContent);
}
@@ -429,6 +439,8 @@
// Check that the base permits the derivation
// -----------------------------------------------------------------------
if ((baseFinalSet & fDerivedBy)!=0) {
+ fAttrChecker.returnAttrArray(simpleContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
String errorKey = (fDerivedBy==XSConstants.DERIVATION_EXTENSION) ?
"cos-ct-extends.1.1" : "derivation-ok-restriction.1";
throw new ComplexTypeRecoverableError(errorKey,
@@ -443,12 +455,14 @@
// traverse annotation if any
if (DOMUtil.getLocalName(simpleContent).equals(SchemaSymbols.ELT_ANNOTATION)) {
- traverseAnnotationDecl(simpleContent, null, false, schemaDoc);
+ traverseAnnotationDecl(simpleContent, derivationTypeAttrValues, false, schemaDoc);
simpleContent = DOMUtil.getNextSiblingElement(simpleContent);
}
if (simpleContent !=null &&
- DOMUtil.getLocalName(simpleContent).equals(SchemaSymbols.ELT_ANNOTATION)){
+ DOMUtil.getLocalName(simpleContent).equals(SchemaSymbols.ELT_ANNOTATION)){
+ fAttrChecker.returnAttrArray(simpleContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
throw new ComplexTypeRecoverableError("src-ct.0.1",
new Object[]{fName,SchemaSymbols.ELT_ANNOTATION},
simpleContent);
@@ -469,15 +483,19 @@
XSSimpleType dv = fSchemaHandler.fSimpleTypeTraverser.traverseLocal(
simpleContent, schemaDoc, grammar);
- if (dv == null)
- throw new ComplexTypeRecoverableError();
-
+ if (dv == null) {
+ fAttrChecker.returnAttrArray(simpleContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
+ throw new ComplexTypeRecoverableError();
+ }
//check that this datatype validator is validly derived from the base
//according to derivation-ok-restriction 5.1.2.1
if (baseValidator != null &&
!XSConstraints.checkSimpleDerivationOk(dv, baseValidator,
baseValidator.getFinal())) {
+ fAttrChecker.returnAttrArray(simpleContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
throw new ComplexTypeRecoverableError("derivation-ok-restriction.5.1.2.1",
new Object[]{fName},
simpleContent);
@@ -489,6 +507,8 @@
// this only happens when restricting a mixed/emptiable CT
// but there is no <simpleType>, which is required
if (baseValidator == null) {
+ fAttrChecker.returnAttrArray(simpleContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
throw new ComplexTypeRecoverableError("src-ct.2.2",
new Object[]{fName}, simpleContent);
}
@@ -522,6 +542,8 @@
// -----------------------------------------------------------------------
if (attrNode != null) {
if (!isAttrOrAttrGroup(attrNode)) {
+ fAttrChecker.returnAttrArray(simpleContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
throw new ComplexTypeRecoverableError("src-ct.0.1",
new Object[]{fName,DOMUtil.getLocalName(attrNode)},
attrNode);
@@ -529,18 +551,28 @@
Element node=traverseAttrsAndAttrGrps(attrNode,fAttrGrp,
schemaDoc,grammar,fComplexTypeDecl);
if (node!=null) {
+ fAttrChecker.returnAttrArray(simpleContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
throw new ComplexTypeRecoverableError("src-ct.0.1",
new Object[]{fName,DOMUtil.getLocalName(node)},
node);
}
}
- mergeAttributes(baseComplexType.getAttrGrp(), fAttrGrp, fName, false, simpleContentElement);
+ try {
+ mergeAttributes(baseComplexType.getAttrGrp(), fAttrGrp, fName, false, simpleContentElement);
+ } catch (ComplexTypeRecoverableError e) {
+ fAttrChecker.returnAttrArray(simpleContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
+ throw e;
+ }
// Prohibited uses must be removed after merge for RESTRICTION
fAttrGrp.removeProhibitedAttrs();
String errorCode=fAttrGrp.validRestrictionOf(baseComplexType.getAttrGrp());
if (errorCode != null) {
+ fAttrChecker.returnAttrArray(simpleContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
throw new ComplexTypeRecoverableError(errorCode,
new Object[]{fName}, attrNode);
}
@@ -557,6 +589,8 @@
// -----------------------------------------------------------------------
Element attrNode = simpleContent;
if (!isAttrOrAttrGroup(attrNode)) {
+ fAttrChecker.returnAttrArray(simpleContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
throw new ComplexTypeRecoverableError("src-ct.0.1",
new Object[]{fName,DOMUtil.getLocalName(attrNode)},
attrNode);
@@ -565,6 +599,8 @@
schemaDoc,grammar,fComplexTypeDecl);
if (node!=null) {
+ fAttrChecker.returnAttrArray(simpleContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
throw new ComplexTypeRecoverableError("src-ct.0.1",
new Object[]{fName,DOMUtil.getLocalName(node)},
node);
@@ -574,9 +610,19 @@
}
if (baseComplexType != null) {
- mergeAttributes(baseComplexType.getAttrGrp(), fAttrGrp, fName, true, simpleContentElement);
+ try {
+ mergeAttributes(baseComplexType.getAttrGrp(), fAttrGrp, fName, true, simpleContentElement);
+ } catch (ComplexTypeRecoverableError e) {
+ fAttrChecker.returnAttrArray(simpleContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
+ throw e;
+ }
}
}
+ // and finally, since we've nothing more to traverse, we can
+ // return the attributes (and thereby reset the namespace support)
+ fAttrChecker.returnAttrArray(simpleContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
}
private void traverseComplexContent(Element complexContentElement,
@@ -585,7 +631,7 @@
throws ComplexTypeRecoverableError {
- Object[] attrValues = fAttrChecker.checkAttributes(complexContentElement, false,
+ Object[] complexContentAttrValues = fAttrChecker.checkAttributes(complexContentElement, false,
schemaDoc);
@@ -593,7 +639,7 @@
// Determine if this is mixed content
// -----------------------------------------------------------------------
boolean mixedContent = mixedOnType;
- Boolean mixedAtt = (Boolean) attrValues[XSAttributeChecker.ATTIDX_MIXED];
+ Boolean mixedAtt = (Boolean) complexContentAttrValues[XSAttributeChecker.ATTIDX_MIXED];
if (mixedAtt != null) {
mixedContent = mixedAtt.booleanValue();
}
@@ -609,14 +655,14 @@
if (complexContent != null) {
// traverse annotation if any
if (DOMUtil.getLocalName(complexContent).equals(SchemaSymbols.ELT_ANNOTATION)) {
- traverseAnnotationDecl(complexContent, attrValues, false, schemaDoc);
+ traverseAnnotationDecl(complexContent, complexContentAttrValues, false, schemaDoc);
complexContent = DOMUtil.getNextSiblingElement(complexContent);
}
}
- fAttrChecker.returnAttrArray(attrValues, schemaDoc);
// If there are no children, return
if (complexContent==null) {
+ fAttrChecker.returnAttrArray(complexContentAttrValues, schemaDoc);
throw new ComplexTypeRecoverableError("src-ct.0.2",
new Object[]{fName,SchemaSymbols.ELT_COMPLEXCONTENT},
complexContentElement);
@@ -631,26 +677,29 @@
else if (complexContentName.equals(SchemaSymbols.ELT_EXTENSION))
fDerivedBy = XSConstants.DERIVATION_EXTENSION;
else {
+ fAttrChecker.returnAttrArray(complexContentAttrValues, schemaDoc);
throw new ComplexTypeRecoverableError("src-ct.0.1",
new Object[]{fName, complexContentName}, complexContent);
}
Element elemTmp = DOMUtil.getNextSiblingElement(complexContent);
if (elemTmp != null) {
+ fAttrChecker.returnAttrArray(complexContentAttrValues, schemaDoc);
String siblingName = DOMUtil.getLocalName(elemTmp);
throw new ComplexTypeRecoverableError("src-ct.0.1",
new Object[]{fName, siblingName}, elemTmp);
}
- attrValues = fAttrChecker.checkAttributes(complexContent, false,
+ Object[] derivationTypeAttrValues = fAttrChecker.checkAttributes(complexContent, false,
schemaDoc);
- QName baseTypeName = (QName) attrValues[XSAttributeChecker.ATTIDX_BASE];
- fAttrChecker.returnAttrArray(attrValues, schemaDoc);
+ QName baseTypeName = (QName) derivationTypeAttrValues[XSAttributeChecker.ATTIDX_BASE];
// -----------------------------------------------------------------------
// Need a base type. Check that it's a complex type
// -----------------------------------------------------------------------
if (baseTypeName==null) {
+ fAttrChecker.returnAttrArray(complexContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
throw new ComplexTypeRecoverableError("src-ct.0.3",
new Object[]{fName}, complexContent);
}
@@ -660,10 +709,15 @@
baseTypeName,
complexContent);
- if (type==null)
+ if (type==null) {
+ fAttrChecker.returnAttrArray(complexContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
throw new ComplexTypeRecoverableError();
+ }
if (! (type instanceof XSComplexTypeDecl)) {
+ fAttrChecker.returnAttrArray(complexContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
throw new ComplexTypeRecoverableError("src-ct.1",
new Object[]{fName}, complexContent);
}
@@ -674,6 +728,8 @@
// Check that the base permits the derivation
// -----------------------------------------------------------------------
if ((baseType.getFinal() & fDerivedBy)!=0) {
+ fAttrChecker.returnAttrArray(complexContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
String errorKey = (fDerivedBy==XSConstants.DERIVATION_EXTENSION) ?
"cos-ct-extends.1.1" : "derivation-ok-restriction.1";
throw new ComplexTypeRecoverableError(errorKey,
@@ -688,11 +744,13 @@
if (complexContent != null) {
// traverse annotation if any
if (DOMUtil.getLocalName(complexContent).equals(SchemaSymbols.ELT_ANNOTATION)) {
- traverseAnnotationDecl(complexContent, null, false, schemaDoc);
+ traverseAnnotationDecl(complexContent, derivationTypeAttrValues, false, schemaDoc);
complexContent = DOMUtil.getNextSiblingElement(complexContent);
}
if (complexContent !=null &&
- DOMUtil.getLocalName(complexContent).equals(SchemaSymbols.ELT_ANNOTATION)){
+ DOMUtil.getLocalName(complexContent).equals(SchemaSymbols.ELT_ANNOTATION)){
+ fAttrChecker.returnAttrArray(complexContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
throw new ComplexTypeRecoverableError("src-ct.0.1",
new Object[]{fName,SchemaSymbols.ELT_ANNOTATION}, complexContent);
}
@@ -701,8 +759,14 @@
// Process the content. Note: should I try to catch any complexType errors
// here in order to return the attr array?
// -----------------------------------------------------------------------
- processComplexContent(complexContent, mixedContent, true, schemaDoc,
+ try {
+ processComplexContent(complexContent, mixedContent, true, schemaDoc,
grammar);
+ } catch (ComplexTypeRecoverableError e) {
+ fAttrChecker.returnAttrArray(complexContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
+ throw e;
+ }
// -----------------------------------------------------------------------
// Compose the final content and attribute uses
@@ -718,18 +782,28 @@
if (fContentType == XSComplexTypeDecl.CONTENTTYPE_MIXED &&
- baseType.getContentType() != XSComplexTypeDecl.CONTENTTYPE_MIXED) {
+ baseType.getContentType() != XSComplexTypeDecl.CONTENTTYPE_MIXED) {
+ fAttrChecker.returnAttrArray(complexContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
throw new ComplexTypeRecoverableError("derivation-ok-restriction.5.3.1.2",
new Object[]{fName}, complexContent);
}
- mergeAttributes(baseType.getAttrGrp(), fAttrGrp, fName, false, complexContent);
+ try {
+ mergeAttributes(baseType.getAttrGrp(), fAttrGrp, fName, false, complexContent);
+ } catch (ComplexTypeRecoverableError e) {
+ fAttrChecker.returnAttrArray(complexContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
+ throw e;
+ }
// Remove prohibited uses. Must be done after merge for RESTRICTION.
fAttrGrp.removeProhibitedAttrs();
if (baseType != SchemaGrammar.fAnyType) {
String error = fAttrGrp.validRestrictionOf(baseType.getAttrGrp());
if (error != null) {
+ fAttrChecker.returnAttrArray(complexContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
throw new ComplexTypeRecoverableError(error,
new Object[]{fName}, complexContent);
}
@@ -752,18 +826,22 @@
// Check if the contentType of the base is consistent with the new type
// cos-ct-extends.1.4.3.2
if (fContentType == XSComplexTypeDecl.CONTENTTYPE_ELEMENT &&
- baseType.getContentType() != XSComplexTypeDecl.CONTENTTYPE_ELEMENT ||
- fContentType == XSComplexTypeDecl.CONTENTTYPE_MIXED &&
- baseType.getContentType() != XSComplexTypeDecl.CONTENTTYPE_MIXED) {
+ baseType.getContentType() != XSComplexTypeDecl.CONTENTTYPE_ELEMENT ||
+ fContentType == XSComplexTypeDecl.CONTENTTYPE_MIXED &&
+ baseType.getContentType() != XSComplexTypeDecl.CONTENTTYPE_MIXED) {
+ fAttrChecker.returnAttrArray(complexContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
throw new ComplexTypeRecoverableError("cos-ct-extends.1.4.3.2.2.1",
new Object[]{fName}, complexContent);
}
// if the content of either type is an "all" model group, error.
if (fParticle.fType == XSParticleDecl.PARTICLE_MODELGROUP &&
- ((XSModelGroupImpl)fParticle.fValue).fCompositor == XSModelGroupImpl.MODELGROUP_ALL ||
- ((XSParticleDecl)baseType.getParticle()).fType == XSParticleDecl.PARTICLE_MODELGROUP &&
- ((XSModelGroupImpl)(((XSParticleDecl)baseType.getParticle())).fValue).fCompositor == XSModelGroupImpl.MODELGROUP_ALL) {
+ ((XSModelGroupImpl)fParticle.fValue).fCompositor == XSModelGroupImpl.MODELGROUP_ALL ||
+ ((XSParticleDecl)baseType.getParticle()).fType == XSParticleDecl.PARTICLE_MODELGROUP &&
+ ((XSModelGroupImpl)(((XSParticleDecl)baseType.getParticle())).fValue).fCompositor == XSModelGroupImpl.MODELGROUP_ALL) {
+ fAttrChecker.returnAttrArray(complexContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
throw new ComplexTypeRecoverableError("cos-all-limited.1.2",
null, complexContent);
}
@@ -784,9 +862,19 @@
// Remove prohibited uses. Must be done before merge for EXTENSION.
fAttrGrp.removeProhibitedAttrs();
+ try {
mergeAttributes(baseType.getAttrGrp(), fAttrGrp, fName, true, complexContent);
+ } catch (ComplexTypeRecoverableError e) {
+ fAttrChecker.returnAttrArray(complexContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
+ throw e;
+ }
}
+
+ // and *finally* we can legitimately return the attributes!
+ fAttrChecker.returnAttrArray(complexContentAttrValues, schemaDoc);
+ fAttrChecker.returnAttrArray(derivationTypeAttrValues, schemaDoc);
} // end of traverseComplexContent
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org