Author: mukulg
Date: Tue Jul 7 12:26:22 2009
New Revision: 791813
URL: http://svn.apache.org/viewvc?rev=791813&view=rev
Log:
solved a bug with assertions processing, when having content model,
"complexType with simpleContent"
Modified:
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDComplexTypeTraverser.java
Modified:
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
URL:
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java?rev=791813&r1=791812&r2=791813&view=diff
==============================================================================
---
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
(original)
+++
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
Tue Jul 7 12:26:22 2009
@@ -50,6 +50,7 @@
import org.apache.xerces.impl.xs.models.CMBuilder;
import org.apache.xerces.impl.xs.models.CMNodeFactory;
import org.apache.xerces.impl.xs.models.XSCMValidator;
+import org.apache.xerces.impl.xs.util.XSObjectListImpl;
import org.apache.xerces.util.AugmentationsImpl;
import org.apache.xerces.util.IntStack;
import org.apache.xerces.util.SymbolTable;
@@ -78,6 +79,7 @@
import org.apache.xerces.xs.AttributePSVI;
import org.apache.xerces.xs.ElementPSVI;
import org.apache.xerces.xs.ShortList;
+import org.apache.xerces.xs.XSAssert;
import org.apache.xerces.xs.XSComplexTypeDefinition;
import org.apache.xerces.xs.XSConstants;
import org.apache.xerces.xs.XSMultiValueFacet;
@@ -2336,19 +2338,48 @@
// process assertions
if (fSchemaVersion == Constants.SCHEMA_VERSION_1_1) {
XSTypeDefinition typeDef = fCurrentPSVI.getTypeDefinition();
-
Object assertObject = null;
+
if (typeDef.getTypeCategory() == XSTypeDefinition.COMPLEX_TYPE) {
+ // if elements's governing type is a "complex type"
+ XSObjectListImpl assertions = new XSObjectListImpl();
XSComplexTypeDefinition complexTypeDef =
(XSComplexTypeDefinition) typeDef;
- XSObjectList assertions = complexTypeDef.getAssertions();
- if (assertions.getLength() > 0) {
- assertObject = assertions;
- // instantiate the assertions processor
- if (assertionProcessor == null) {
- initializeAssertProcessor();
- }
+
+ // there could be assertion facets from complexType ->
simpleContent
+ // (xs:assertion). add them to the list of assertions to be
evaluated.
+ XSSimpleTypeDefinition simpleContentModel =
complexTypeDef.getSimpleType();
+ if (simpleContentModel != null) {
+ XSObjectList facets =
simpleContentModel.getMultiValueFacets();
+ for (int i = 0; i < facets.getLength(); i++) {
+ XSMultiValueFacet facet = (XSMultiValueFacet)
facets.item(i);
+ if (facet.getFacetKind() ==
XSSimpleTypeDefinition.FACET_ASSERT) {
+ Vector simpleTypeAsserts = facet.getAsserts();
+ for (int j = 0; j < simpleTypeAsserts.size(); j++) {
+
assertions.addXSObject((XSAssert)simpleTypeAsserts.elementAt(j));
+ }
+ break;
+ }
+ }
+ }
+
+ // there could be assertions, from the complex type definition
+ // (xs:assert). add them to the list of assertions to be
evaluated.
+ XSObjectList complexTypeAsserts = complexTypeDef.getAssertions();
+ if (complexTypeAsserts.getLength() > 0) {
+ for (int i = 0; i < complexTypeAsserts.getLength(); i++) {
+ assertions.addXSObject((XSAssert)complexTypeAsserts.get(i));
+ }
+ }
+
+ if (assertions.size() > 0) {
+ assertObject = assertions;
+ // instantiate the assertions processor
+ if (assertionProcessor == null) {
+ initializeAssertProcessor();
}
+ }
} else if (typeDef.getTypeCategory() ==
XSTypeDefinition.SIMPLE_TYPE) {
+ // if elements's governing type is a "simple type"
XSSimpleTypeDefinition simpleTypeDef =
(XSSimpleTypeDefinition) typeDef;
XSObjectList facets = simpleTypeDef.getMultiValueFacets();
for (int i = 0; i < facets.getLength(); i++) {
Modified:
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDComplexTypeTraverser.java
URL:
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDComplexTypeTraverser.java?rev=791813&r1=791812&r2=791813&view=diff
==============================================================================
---
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDComplexTypeTraverser.java
(original)
+++
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDComplexTypeTraverser.java
Tue Jul 7 12:26:22 2009
@@ -676,21 +676,21 @@
if (fXSSimpleType instanceof XSSimpleTypeDecl) {
((XSSimpleTypeDecl)fXSSimpleType).setAnonymous(true);
}
- try{
+ try {
fValidationState.setNamespaceSupport(schemaDoc.fNamespaceSupport);
fXSSimpleType.applyFacets(facetData, presentFacets,
fixedFacets, fValidationState);
- }catch(InvalidDatatypeFacetException ex){
+ }
+ catch(InvalidDatatypeFacetException ex){
reportSchemaError(ex.getKey(), ex.getArgs(), simpleContent);
}
//
-----------------------------------------------------------------------
- // Traverse any attributes
+ // Traverse any attributes/asserts
//
-----------------------------------------------------------------------
if (attrOrAssertNode != null) {
if (isAttrOrAttrGroup(attrOrAssertNode)) {
Element
node=traverseAttrsAndAttrGrps(attrOrAssertNode,fAttrGrp,
schemaDoc,grammar,fComplexTypeDecl);
-
if (node != null) {
if (isAssert(node)) {
traverseAsserts(node, schemaDoc, grammar,
@@ -705,12 +705,10 @@
DOMUtil.getLocalName(node) },
node);
}
}
- }
- else if (isAssert(attrOrAssertNode)) {
+ } else if (isAssert(attrOrAssertNode)) {
traverseAsserts(attrOrAssertNode, schemaDoc, grammar,
fComplexTypeDecl);
- }
- else {
+ } else {
fAttrChecker.returnAttrArray(simpleContentAttrValues,
schemaDoc);
fAttrChecker.returnAttrArray(derivationTypeAttrValues,
schemaDoc);
throw new
ComplexTypeRecoverableError("s4s-elt-invalid-content.1",
@@ -745,7 +743,7 @@
fXSSimpleType = baseValidator;
if (simpleContent != null) {
//
-----------------------------------------------------------------------
- // Traverse any attributes
+ // Traverse any attributes/asserts
//
-----------------------------------------------------------------------
Element attrOrAssertNode = simpleContent;
if (isAttrOrAttrGroup(attrOrAssertNode)) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]