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 2009/09/23 18:17:17 UTC

svn commit: r818156 - /xerces/java/trunk/src/org/apache/xerces/impl/xs/traversers/XSDAbstractTraverser.java

Author: sandygao
Date: Wed Sep 23 16:17:16 2009
New Revision: 818156

URL: http://svn.apache.org/viewvc?rev=818156&view=rev
Log:
Fixing a bug: we didn't report an error when the "value" attribute is missing on facet elements in schema documents. Recover by ignoring such facet elements.

Modified:
    xerces/java/trunk/src/org/apache/xerces/impl/xs/traversers/XSDAbstractTraverser.java

Modified: xerces/java/trunk/src/org/apache/xerces/impl/xs/traversers/XSDAbstractTraverser.java
URL: http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/xs/traversers/XSDAbstractTraverser.java?rev=818156&r1=818155&r2=818156&view=diff
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/xs/traversers/XSDAbstractTraverser.java (original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/xs/traversers/XSDAbstractTraverser.java Wed Sep 23 16:17:16 2009
@@ -294,6 +294,15 @@
             if (facet.equals(SchemaSymbols.ELT_ENUMERATION)) {
                 attrs = fAttrChecker.checkAttributes(content, false, schemaDoc, hasQName);
                 String enumVal = (String)attrs[XSAttributeChecker.ATTIDX_VALUE];
+                // The facet can't be used if the value is missing. Ignore
+                // this facet element.
+                if (enumVal == null) {
+                    reportSchemaError("s4s-att-must-appear", new Object[]{SchemaSymbols.ELT_ENUMERATION, SchemaSymbols.ATT_VALUE}, content);
+                    fAttrChecker.returnAttrArray (attrs, schemaDoc);
+                    content = DOMUtil.getNextSiblingElement(content);
+                    continue;
+                }
+                
                 NamespaceSupport nsDecls = (NamespaceSupport)attrs[XSAttributeChecker.ATTIDX_ENUMNSDECLS];
                 
                 // for NOTATION types, need to check whether there is a notation
@@ -350,14 +359,24 @@
             }
             else if (facet.equals(SchemaSymbols.ELT_PATTERN)) {
                 attrs = fAttrChecker.checkAttributes(content, false, schemaDoc);
+                String patternVal = (String)attrs[XSAttributeChecker.ATTIDX_VALUE];
+                // The facet can't be used if the value is missing. Ignore
+                // this facet element.
+                if (patternVal == null) {
+                    reportSchemaError("s4s-att-must-appear", new Object[]{SchemaSymbols.ELT_PATTERN, SchemaSymbols.ATT_VALUE}, content);
+                    fAttrChecker.returnAttrArray (attrs, schemaDoc);
+                    content = DOMUtil.getNextSiblingElement(content);
+                    continue;
+                }
+                
                 if (fPattern.length() == 0) {
-                    fPattern.append((String)attrs[XSAttributeChecker.ATTIDX_VALUE]);
+                    fPattern.append(patternVal);
                 } else {
                     // ---------------------------------------------
                     //datatypes: 5.2.4 pattern: src-multiple-pattern
                     // ---------------------------------------------
                     fPattern.append("|");
-                    fPattern.append((String)attrs[XSAttributeChecker.ATTIDX_VALUE]);
+                    fPattern.append(patternVal);
                 }
                 Element child = DOMUtil.getFirstChildElement( content );
                 if (child != null &&
@@ -426,44 +445,59 @@
                     fAttrChecker.returnAttrArray (attrs, schemaDoc);
                     content = DOMUtil.getNextSiblingElement(content);
                     continue;
-                } else if (attrs[XSAttributeChecker.ATTIDX_VALUE] != null) {
-                    facetsPresent |= currentFacet;
-                    // check for fixed facet
-                    if (((Boolean)attrs[XSAttributeChecker.ATTIDX_FIXED]).booleanValue()) {
-                        facetsFixed |= currentFacet;
-                    }
-                    switch (currentFacet) {
-                    case XSSimpleType.FACET_MINLENGTH:
-                        xsFacets.minLength = ((XInt)attrs[XSAttributeChecker.ATTIDX_VALUE]).intValue();
+                }
+                
+                // The facet can't be used if the value is missing. Ignore
+                // this facet element.
+                if (attrs[XSAttributeChecker.ATTIDX_VALUE] == null) {
+                    // Report an error if the "value" attribute is missing.
+                    // If it's not missing, then its value is invalid, and an
+                    // error should have already been reported by the
+                    // attribute checker.
+                    if (content.getAttributeNodeNS(null, "value") == null) {
+                        reportSchemaError("s4s-att-must-appear", new Object[]{content.getLocalName(), SchemaSymbols.ATT_VALUE}, content);
+                    }
+                    fAttrChecker.returnAttrArray (attrs, schemaDoc);
+                    content = DOMUtil.getNextSiblingElement(content);
+                    continue;
+                }
+                
+                facetsPresent |= currentFacet;
+                // check for fixed facet
+                if (((Boolean)attrs[XSAttributeChecker.ATTIDX_FIXED]).booleanValue()) {
+                    facetsFixed |= currentFacet;
+                }
+                switch (currentFacet) {
+                case XSSimpleType.FACET_MINLENGTH:
+                    xsFacets.minLength = ((XInt)attrs[XSAttributeChecker.ATTIDX_VALUE]).intValue();
                     break;
-                    case XSSimpleType.FACET_MAXLENGTH:
-                        xsFacets.maxLength = ((XInt)attrs[XSAttributeChecker.ATTIDX_VALUE]).intValue();
+                case XSSimpleType.FACET_MAXLENGTH:
+                    xsFacets.maxLength = ((XInt)attrs[XSAttributeChecker.ATTIDX_VALUE]).intValue();
                     break;
-                    case XSSimpleType.FACET_MAXEXCLUSIVE:
-                        xsFacets.maxExclusive = (String)attrs[XSAttributeChecker.ATTIDX_VALUE];
+                case XSSimpleType.FACET_MAXEXCLUSIVE:
+                    xsFacets.maxExclusive = (String)attrs[XSAttributeChecker.ATTIDX_VALUE];
                     break;
-                    case XSSimpleType.FACET_MAXINCLUSIVE:
-                        xsFacets.maxInclusive = (String)attrs[XSAttributeChecker.ATTIDX_VALUE];
+                case XSSimpleType.FACET_MAXINCLUSIVE:
+                    xsFacets.maxInclusive = (String)attrs[XSAttributeChecker.ATTIDX_VALUE];
                     break;
-                    case XSSimpleType.FACET_MINEXCLUSIVE:
-                        xsFacets.minExclusive = (String)attrs[XSAttributeChecker.ATTIDX_VALUE];
+                case XSSimpleType.FACET_MINEXCLUSIVE:
+                    xsFacets.minExclusive = (String)attrs[XSAttributeChecker.ATTIDX_VALUE];
                     break;
-                    case XSSimpleType.FACET_MININCLUSIVE:
-                        xsFacets.minInclusive = (String)attrs[XSAttributeChecker.ATTIDX_VALUE];
+                case XSSimpleType.FACET_MININCLUSIVE:
+                    xsFacets.minInclusive = (String)attrs[XSAttributeChecker.ATTIDX_VALUE];
                     break;
-                    case XSSimpleType.FACET_TOTALDIGITS:
-                        xsFacets.totalDigits = ((XInt)attrs[XSAttributeChecker.ATTIDX_VALUE]).intValue();
+                case XSSimpleType.FACET_TOTALDIGITS:
+                    xsFacets.totalDigits = ((XInt)attrs[XSAttributeChecker.ATTIDX_VALUE]).intValue();
                     break;
-                    case XSSimpleType.FACET_FRACTIONDIGITS:
-                        xsFacets.fractionDigits = ((XInt)attrs[XSAttributeChecker.ATTIDX_VALUE]).intValue();
+                case XSSimpleType.FACET_FRACTIONDIGITS:
+                    xsFacets.fractionDigits = ((XInt)attrs[XSAttributeChecker.ATTIDX_VALUE]).intValue();
                     break;
-                    case XSSimpleType.FACET_WHITESPACE:
-                        xsFacets.whiteSpace = ((XInt)attrs[XSAttributeChecker.ATTIDX_VALUE]).shortValue();
+                case XSSimpleType.FACET_WHITESPACE:
+                    xsFacets.whiteSpace = ((XInt)attrs[XSAttributeChecker.ATTIDX_VALUE]).shortValue();
                     break;
-                    case XSSimpleType.FACET_LENGTH:
-                        xsFacets.length = ((XInt)attrs[XSAttributeChecker.ATTIDX_VALUE]).intValue();
+                case XSSimpleType.FACET_LENGTH:
+                    xsFacets.length = ((XInt)attrs[XSAttributeChecker.ATTIDX_VALUE]).intValue();
                     break;
-                    }
                 }
                 
                 Element child = DOMUtil.getFirstChildElement( content );



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