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: [email protected]
For additional commands, e-mail: [email protected]