You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by mr...@apache.org on 2009/08/20 23:18:49 UTC
svn commit: r806363 - in /xerces/java/trunk/src/org/apache/xerces/impl:
msg/XMLSchemaMessages.properties xs/XMLSchemaValidator.java
xs/models/XSAllCM.java xs/models/XSCMValidator.java xs/models/XSDFACM.java
xs/models/XSEmptyCM.java
Author: mrglavas
Date: Thu Aug 20 21:18:48 2009
New Revision: 806363
URL: http://svn.apache.org/viewvc?rev=806363&view=rev
Log:
Produce more helpful error messages when minOccurs/maxOccurs constraints are violated. We're able to do this in cases where we are using a counting DFA.
Modified:
xerces/java/trunk/src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties
xerces/java/trunk/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
xerces/java/trunk/src/org/apache/xerces/impl/xs/models/XSAllCM.java
xerces/java/trunk/src/org/apache/xerces/impl/xs/models/XSCMValidator.java
xerces/java/trunk/src/org/apache/xerces/impl/xs/models/XSDFACM.java
xerces/java/trunk/src/org/apache/xerces/impl/xs/models/XSEmptyCM.java
Modified: xerces/java/trunk/src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties
URL: http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties?rev=806363&r1=806362&r2=806363&view=diff
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties (original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties Thu Aug 20 21:18:48 2009
@@ -58,6 +58,12 @@
cvc-complex-type.2.4.b = cvc-complex-type.2.4.b: The content of element ''{0}'' is not complete. One of ''{1}'' is expected.
cvc-complex-type.2.4.c = cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element ''{0}''.
cvc-complex-type.2.4.d = cvc-complex-type.2.4.d: Invalid content was found starting with element ''{0}''. No child element is expected at this point.
+ cvc-complex-type.2.4.e = cvc-complex-type.2.4.e: ''{0}'' can occur a maximum of ''{2}'' times in the current sequence. This limit was exceeded. At this point one of ''{1}'' is expected.
+ cvc-complex-type.2.4.f = cvc-complex-type.2.4.f: ''{0}'' can occur a maximum of ''{1}'' times in the current sequence. This limit was exceeded. No child element is expected at this point.
+ cvc-complex-type.2.4.g = cvc-complex-type.2.4.g: Invalid content was found starting with element ''{0}''. ''{1}'' is expected to occur a minimum of ''{2}'' times in the current sequence. One more instance is required to satisfy this constraint.
+ cvc-complex-type.2.4.h = cvc-complex-type.2.4.h: Invalid content was found starting with element ''{0}''. ''{1}'' is expected to occur a minimum of ''{2}'' times in the current sequence. ''{3}'' more instances are required to satisfy this constraint.
+ cvc-complex-type.2.4.i = cvc-complex-type.2.4.i: The content of element ''{0}'' is not complete. ''{1}'' is expected to occur a minimum of ''{2}'' times. One more instance is required to satisfy this constraint.
+ cvc-complex-type.2.4.j = cvc-complex-type.2.4.j: The content of element ''{0}'' is not complete. ''{1}'' is expected to occur a minimum of ''{2}'' times. ''{3}'' more instances are required to satisfy this constraint.
cvc-complex-type.3.1 = cvc-complex-type.3.1: Value ''{2}'' of attribute ''{1}'' of element ''{0}'' is not valid with respect to the corresponding attribute use. Attribute ''{1}'' has a fixed value of ''{3}''.
cvc-complex-type.3.2.1 = cvc-complex-type.3.2.1: Element ''{0}'' does not have an attribute wildcard for attribute ''{1}''.
cvc-complex-type.3.2.2 = cvc-complex-type.3.2.2: Attribute ''{1}'' is not allowed to appear in element ''{0}''.
Modified: xerces/java/trunk/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
URL: http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java?rev=806363&r1=806362&r2=806363&view=diff
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java (original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java Thu Aug 20 21:18:48 2009
@@ -1943,11 +1943,52 @@
if (ctype.fParticle != null
&& (next = fCurrentCM.whatCanGoHere(fCurrCMState)).size() > 0) {
String expected = expectedStr(next);
- reportSchemaError(
- "cvc-complex-type.2.4.a",
- new Object[] { element.rawname, expected });
- } else {
- reportSchemaError("cvc-complex-type.2.4.d", new Object[] { element.rawname });
+ final int[] occurenceInfo = fCurrentCM.occurenceInfo(fCurrCMState);
+ if (occurenceInfo != null) {
+ final int minOccurs = occurenceInfo[0];
+ final int maxOccurs = occurenceInfo[1];
+ final int count = occurenceInfo[2];
+ // Check if this is a violation of minOccurs
+ if (count < minOccurs) {
+ final int required = minOccurs - count;
+ if (required > 1) {
+ reportSchemaError("cvc-complex-type.2.4.h", new Object[] { element.rawname,
+ fCurrentCM.getTermName(occurenceInfo[3]), Integer.toString(minOccurs), Integer.toString(required) });
+ }
+ else {
+ reportSchemaError("cvc-complex-type.2.4.g", new Object[] { element.rawname,
+ fCurrentCM.getTermName(occurenceInfo[3]), Integer.toString(minOccurs) });
+ }
+ }
+ // Check if this is a violation of maxOccurs
+ else if (count >= maxOccurs && maxOccurs != SchemaSymbols.OCCURRENCE_UNBOUNDED) {
+ reportSchemaError("cvc-complex-type.2.4.e", new Object[] { element.rawname,
+ expected, Integer.toString(maxOccurs) });
+ }
+ else {
+ reportSchemaError("cvc-complex-type.2.4.a", new Object[] { element.rawname, expected });
+ }
+ }
+ else {
+ reportSchemaError("cvc-complex-type.2.4.a", new Object[] { element.rawname, expected });
+ }
+ }
+ else {
+ final int[] occurenceInfo = fCurrentCM.occurenceInfo(fCurrCMState);
+ if (occurenceInfo != null) {
+ final int maxOccurs = occurenceInfo[1];
+ final int count = occurenceInfo[2];
+ // Check if this is a violation of maxOccurs
+ if (count >= maxOccurs && maxOccurs != SchemaSymbols.OCCURRENCE_UNBOUNDED) {
+ reportSchemaError("cvc-complex-type.2.4.f", new Object[] { element.rawname, Integer.toString(maxOccurs) });
+ }
+ else {
+ reportSchemaError("cvc-complex-type.2.4.d", new Object[] { element.rawname });
+ }
+ }
+ else {
+ reportSchemaError("cvc-complex-type.2.4.d", new Object[] { element.rawname });
+ }
}
}
}
@@ -3435,9 +3476,29 @@
}
if (fCurrCMState[0] >= 0 && !fCurrentCM.endContentModel(fCurrCMState)) {
String expected = expectedStr(fCurrentCM.whatCanGoHere(fCurrCMState));
- reportSchemaError(
- "cvc-complex-type.2.4.b",
- new Object[] { element.rawname, expected });
+ final int[] occurenceInfo = fCurrentCM.occurenceInfo(fCurrCMState);
+ if (occurenceInfo != null) {
+ final int minOccurs = occurenceInfo[0];
+ final int count = occurenceInfo[2];
+ // Check if this is a violation of minOccurs
+ if (count < minOccurs) {
+ final int required = minOccurs - count;
+ if (required > 1) {
+ reportSchemaError("cvc-complex-type.2.4.j", new Object[] { element.rawname,
+ fCurrentCM.getTermName(occurenceInfo[3]), Integer.toString(minOccurs), Integer.toString(required) });
+ }
+ else {
+ reportSchemaError("cvc-complex-type.2.4.i", new Object[] { element.rawname,
+ fCurrentCM.getTermName(occurenceInfo[3]), Integer.toString(minOccurs) });
+ }
+ }
+ else {
+ reportSchemaError("cvc-complex-type.2.4.b", new Object[] { element.rawname, expected });
+ }
+ }
+ else {
+ reportSchemaError("cvc-complex-type.2.4.b", new Object[] { element.rawname, expected });
+ }
}
}
}
Modified: xerces/java/trunk/src/org/apache/xerces/impl/xs/models/XSAllCM.java
URL: http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/xs/models/XSAllCM.java?rev=806363&r1=806362&r2=806363&view=diff
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/xs/models/XSAllCM.java (original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/xs/models/XSAllCM.java Thu Aug 20 21:18:48 2009
@@ -212,6 +212,14 @@
}
return ret;
}
+
+ public int [] occurenceInfo(int[] state) {
+ return null;
+ }
+
+ public String getTermName(int termId) {
+ return null;
+ }
public boolean isCompactedForUPA() {
return false;
Modified: xerces/java/trunk/src/org/apache/xerces/impl/xs/models/XSCMValidator.java
URL: http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/xs/models/XSCMValidator.java?rev=806363&r1=806362&r2=806363&view=diff
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/xs/models/XSCMValidator.java (original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/xs/models/XSCMValidator.java Thu Aug 20 21:18:48 2009
@@ -90,6 +90,33 @@
public Vector whatCanGoHere(int[] state);
/**
+ * <p>Returns an array containing information about the current repeating term
+ * or <code>null</code> if no occurrence counting was being performed at the
+ * current state.</p>
+ *
+ * <p>If an array is returned it will have a length == 4 and will contain:
+ * <ul>
+ * <li>a[0] :: min occurs</li>
+ * <li>a[1] :: max occurs</li>
+ * <li>a[2] :: current value of the counter</li>
+ * <li>a[3] :: identifier for the repeating term</li>
+ * </ul>
+ * </p>
+ *
+ * @param state the current state
+ * @return an array containing information about the current repeating term
+ */
+ public int [] occurenceInfo(int[] state);
+
+ /**
+ * Returns the name of the term (element or wildcard) for the given identifier.
+ *
+ * @param termId identifier for the element declaration or wildcard
+ * @return the name of the element declaration or wildcard
+ */
+ public String getTermName(int termId);
+
+ /**
* Checks if this content model has had its min/maxOccurs values reduced for
* purposes of speeding up UPA. If so, this content model should not be used
* for any purpose other than checking unique particle attribution
Modified: xerces/java/trunk/src/org/apache/xerces/impl/xs/models/XSDFACM.java
URL: http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/xs/models/XSDFACM.java?rev=806363&r1=806362&r2=806363&view=diff
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/xs/models/XSDFACM.java (original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/xs/models/XSDFACM.java Thu Aug 20 21:18:48 2009
@@ -1142,6 +1142,30 @@
}
return ret;
}
+
+ public int [] occurenceInfo(int[] state) {
+ if (fCountingStates != null) {
+ int curState = state[0];
+ if (curState < 0) {
+ curState = state[1];
+ }
+ Occurence o = fCountingStates[curState];
+ if (o != null) {
+ int [] occurenceInfo = new int[4];
+ occurenceInfo[0] = o.minOccurs;
+ occurenceInfo[1] = o.maxOccurs;
+ occurenceInfo[2] = state[2];
+ occurenceInfo[3] = o.elemIndex;
+ return occurenceInfo;
+ }
+ }
+ return null;
+ }
+
+ public String getTermName(int termId) {
+ Object term = fElemMap[termId];
+ return (term != null) ? term.toString() : null;
+ }
public boolean isCompactedForUPA() {
return fIsCompactedForUPA;
Modified: xerces/java/trunk/src/org/apache/xerces/impl/xs/models/XSEmptyCM.java
URL: http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/xs/models/XSEmptyCM.java?rev=806363&r1=806362&r2=806363&view=diff
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/xs/models/XSEmptyCM.java (original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/xs/models/XSEmptyCM.java Thu Aug 20 21:18:48 2009
@@ -35,7 +35,7 @@
* @author Lisa Martin, IBM
* @version $Id$
*/
-public class XSEmptyCM implements XSCMValidator {
+public class XSEmptyCM implements XSCMValidator {
//
// Constants
@@ -130,6 +130,14 @@
return EMPTY;
}
+ public int [] occurenceInfo(int[] state) {
+ return null;
+ }
+
+ public String getTermName(int termId) {
+ return null;
+ }
+
public boolean isCompactedForUPA() {
return false;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org