Author: mukulg Date: Fri Feb 15 00:37:09 2013 New Revision: 1446413 URL: http://svn.apache.org/r1446413 Log: commiting fix for jira issue XERCESJ-1605. commiting few related test cases as well.
Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XS11Constraints.java xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XS11CMRestriction.java xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/util/XS11TypeHelper.java Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XS11Constraints.java URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XS11Constraints.java?rev=1446413&r1=1446412&r2=1446413&view=diff ============================================================================== --- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XS11Constraints.java (original) +++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XS11Constraints.java Fri Feb 15 00:37:09 2013 @@ -29,6 +29,7 @@ import org.apache.xerces.impl.xs.models. import org.apache.xerces.impl.xs.models.XS11CMRestriction; import org.apache.xerces.impl.xs.models.XSCMValidator; import org.apache.xerces.impl.xs.util.SimpleLocator; +import org.apache.xerces.impl.xs.util.XS11TypeHelper; import org.apache.xerces.impl.xs.util.XSObjectListImpl; import org.apache.xerces.util.NamespaceSupport; import org.apache.xerces.util.SymbolHash; @@ -133,8 +134,8 @@ class XS11Constraints extends XSConstrai // Types are not the same throw new XMLSchemaException("cos-element-consistent", new Object[] {type.fName, elem.fName}); } - - if (!isTypeTablesEquivalent(elem, existingElem)) { + + if (XS11TypeHelper.isTypeTablesComparable(elem.getTypeAlternatives(), existingElem.getTypeAlternatives()) && !isTypeTablesEquivalent(elem, existingElem)) { // Type tables are not equivalent throw new XMLSchemaException("cos-element-consistent.4.b", new Object[] {type.fName, elem.fName}); } @@ -185,7 +186,7 @@ class XS11Constraints extends XSConstrai if (grammar != null) { final XSElementDecl gElem = grammar.getGlobalElementDecl(elem.fName); if (gElem != null) { - if (gElem != elem && !isTypeTablesEquivalent(elem, gElem)) { + if (gElem != elem && XS11TypeHelper.isTypeTablesComparable(elem.getTypeAlternatives(), gElem.getTypeAlternatives()) && !isTypeTablesEquivalent(elem, gElem)) { // Type tables are not equivalent throw new XMLSchemaException("cos-element-consistent.4.b", new Object[] {type.fName, elem.fName}); } @@ -200,29 +201,33 @@ class XS11Constraints extends XSConstrai */ final public boolean isTypeTablesEquivalent(XSElementDecl elementDecl1, XSElementDecl elementDecl2) { + boolean typeTablesEquivalent = true; + final XSTypeAlternativeImpl[] typeTable1 = elementDecl1.getTypeAlternatives(); final XSTypeAlternativeImpl[] typeTable2 = elementDecl2.getTypeAlternatives(); - - // both tables are absent - if (typeTable1 == typeTable2) { - return true; - } - // one of the tables is absent or has a different length - if (typeTable1 == null || typeTable2 == null - || typeTable1.length != typeTable2.length) { - return false; + // if two type tables have different length + if (typeTable1.length != typeTable2.length) { + typeTablesEquivalent = false; } - for (int typeAltIdx = 0; typeAltIdx < typeTable1.length; typeAltIdx++) { - final XSTypeAlternativeImpl typeAlt1 = typeTable1[typeAltIdx]; - final XSTypeAlternativeImpl typeAlt2 = typeTable2[typeAltIdx]; - if (!isTypeAlternativesEquivalent(typeAlt1, typeAlt2)) { - return false; + if (typeTablesEquivalent) { + for (int typeAltIdx = 0; typeAltIdx < typeTable1.length; typeAltIdx++) { + final XSTypeAlternativeImpl typeAlt1 = typeTable1[typeAltIdx]; + final XSTypeAlternativeImpl typeAlt2 = typeTable2[typeAltIdx]; + if (!isTypeAlternativesEquivalent(typeAlt1, typeAlt2)) { + typeTablesEquivalent = false; + break; + } } } - return isTypeAlternativesEquivalent(elementDecl1.getDefaultTypeDefinition(), elementDecl2.getDefaultTypeDefinition()); + if (typeTablesEquivalent && !elementDecl1.isTypeTableOK()) { + typeTablesEquivalent = isTypeAlternativesEquivalent(elementDecl1.getDefaultTypeDefinition(), elementDecl2.getDefaultTypeDefinition()); + } + + return typeTablesEquivalent; + } // isTypeTablesEquivalent /* Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XS11CMRestriction.java URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XS11CMRestriction.java?rev=1446413&r1=1446412&r2=1446413&view=diff ============================================================================== --- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XS11CMRestriction.java (original) +++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XS11CMRestriction.java Fri Feb 15 00:37:09 2013 @@ -32,6 +32,7 @@ import org.apache.xerces.impl.xs.XSGramm import org.apache.xerces.impl.xs.XSOpenContentDecl; import org.apache.xerces.impl.xs.XSWildcardDecl; import org.apache.xerces.impl.xs.identity.IdentityConstraint; +import org.apache.xerces.impl.xs.util.XS11TypeHelper; import org.apache.xerces.xni.QName; import org.apache.xerces.xs.XSConstants; import org.apache.xerces.xs.XSNamedMap; @@ -498,8 +499,8 @@ public final class XS11CMRestriction imp // 4.6 S.{type table} and G.{type table} either are both absent or // are both present and equivalent. - if (!xsc.isTypeTablesEquivalent(eb, ed)) { - return false; + if (XS11TypeHelper.isTypeTablesComparable(eb.getTypeAlternatives(), ed.getTypeAlternatives()) && !xsc.isTypeTablesEquivalent(eb, ed)) { + return false; } return true; Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/util/XS11TypeHelper.java URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/util/XS11TypeHelper.java?rev=1446413&r1=1446412&r2=1446413&view=diff ============================================================================== --- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/util/XS11TypeHelper.java (original) +++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/util/XS11TypeHelper.java Fri Feb 15 00:37:09 2013 @@ -32,6 +32,7 @@ import org.apache.xerces.impl.validation import org.apache.xerces.impl.xs.SchemaSymbols; import org.apache.xerces.impl.xs.XSComplexTypeDecl; import org.apache.xerces.impl.xs.XSMessageFormatter; +import org.apache.xerces.impl.xs.alternative.XSTypeAlternativeImpl; import org.apache.xerces.util.XMLChar; import org.apache.xerces.xni.NamespaceContext; import org.apache.xerces.xs.XSComplexTypeDefinition; @@ -312,4 +313,18 @@ public class XS11TypeHelper { } // getXPath2ResultSequence + /* + * Check if two type tables can be compared. + */ + public static boolean isTypeTablesComparable(XSTypeAlternativeImpl[] typeTable1, XSTypeAlternativeImpl[] typeTable2) { + boolean typeTablesComparable = true; + + if (typeTable1 == null && typeTable2 == null) { + typeTablesComparable = false; + } + + return typeTablesComparable; + } // isTypeTablesComparable + + } // class XS11TypeHelper --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@xerces.apache.org For additional commands, e-mail: commits-h...@xerces.apache.org