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 2012/09/04 06:43:35 UTC
svn commit: r1380445 - in /xerces/java/trunk/src/org/apache/xerces/impl:
dtd/XMLDTDValidator.java validation/ConfigurableValidationState.java
validation/ValidationState.java xs/XMLSchemaValidator.java
Author: mrglavas
Date: Tue Sep 4 04:43:34 2012
New Revision: 1380445
URL: http://svn.apache.org/viewvc?rev=1380445&view=rev
Log:
JIRA Issue #1581: https://issues.apache.org/jira/browse/XERCESJ-1581. Report multiple IDREF errors during DTD and XML Schema validation.
Modified:
xerces/java/trunk/src/org/apache/xerces/impl/dtd/XMLDTDValidator.java
xerces/java/trunk/src/org/apache/xerces/impl/validation/ConfigurableValidationState.java
xerces/java/trunk/src/org/apache/xerces/impl/validation/ValidationState.java
xerces/java/trunk/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
Modified: xerces/java/trunk/src/org/apache/xerces/impl/dtd/XMLDTDValidator.java
URL: http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/dtd/XMLDTDValidator.java?rev=1380445&r1=1380444&r2=1380445&view=diff
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/dtd/XMLDTDValidator.java (original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/dtd/XMLDTDValidator.java Tue Sep 4 04:43:34 2012
@@ -17,6 +17,8 @@
package org.apache.xerces.impl.dtd;
+import java.util.Iterator;
+
import org.apache.xerces.impl.Constants;
import org.apache.xerces.impl.RevalidationHandler;
import org.apache.xerces.impl.XMLEntityManager;
@@ -2066,12 +2068,14 @@ public class XMLDTDValidator
// IDREF and IDREFS attr (V_IDREF0)
//
if (fPerformValidation) {
- String value = fValidationState.checkIDRefID();
- if (value != null) {
- fErrorReporter.reportError( XMLMessageFormatter.XML_DOMAIN,
- "MSG_ELEMENT_WITH_ID_REQUIRED",
- new Object[]{value},
- XMLErrorReporter.SEVERITY_ERROR );
+ Iterator invIdRefs = fValidationState.checkIDRefID();
+ if (invIdRefs != null) {
+ while (invIdRefs.hasNext()) {
+ fErrorReporter.reportError( XMLMessageFormatter.XML_DOMAIN,
+ "MSG_ELEMENT_WITH_ID_REQUIRED",
+ new Object[]{invIdRefs.next()},
+ XMLErrorReporter.SEVERITY_ERROR );
+ }
}
}
return;
Modified: xerces/java/trunk/src/org/apache/xerces/impl/validation/ConfigurableValidationState.java
URL: http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/validation/ConfigurableValidationState.java?rev=1380445&r1=1380444&r2=1380445&view=diff
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/validation/ConfigurableValidationState.java (original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/validation/ConfigurableValidationState.java Tue Sep 4 04:43:34 2012
@@ -17,6 +17,8 @@
package org.apache.xerces.impl.validation;
+import java.util.Iterator;
+
/**
* <p>An extension of ValidationState which can be configured to turn
* off checking for ID/IDREF errors and unparsed entity errors.</p>
@@ -72,7 +74,7 @@ public final class ConfigurableValidatio
* @return null, if ID/IDREF checking is turned off
* otherwise, returns the value of the super implementation
*/
- public String checkIDRefID() {
+ public Iterator checkIDRefID() {
return (fIdIdrefChecking) ? super.checkIDRefID() : null;
}
Modified: xerces/java/trunk/src/org/apache/xerces/impl/validation/ValidationState.java
URL: http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/validation/ValidationState.java?rev=1380445&r1=1380444&r2=1380445&view=diff
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/validation/ValidationState.java (original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/validation/ValidationState.java Tue Sep 4 04:43:34 2012
@@ -18,6 +18,7 @@
package org.apache.xerces.impl.validation;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.Locale;
@@ -87,18 +88,23 @@ public class ValidationState implements
/**
* return null if all IDREF values have a corresponding ID value;
- * otherwise return the first IDREF value without a matching ID value.
+ * otherwise return an iterator for all the IDREF values without
+ * a matching ID value.
*/
- public String checkIDRefID () {
+ public Iterator checkIDRefID() {
+ HashSet missingIDs = null;
Iterator iter = fIdRefTable.keySet().iterator();
String key;
while (iter.hasNext()) {
key = (String) iter.next();
if (!fIdTable.containsKey(key)) {
- return key;
+ if (missingIDs == null) {
+ missingIDs = new HashSet();
+ }
+ missingIDs.add(key);
}
}
- return null;
+ return (missingIDs != null) ? missingIDs.iterator() : null;
}
public void reset () {
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=1380445&r1=1380444&r2=1380445&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 Tue Sep 4 04:43:34 2012
@@ -2460,10 +2460,12 @@ public class XMLSchemaValidator
// have we reached the end tag of the validation root?
if (fElementDepth == 0) {
// 7 If the element information item is the validation root, it must be valid per Validation Root Valid (ID/IDREF) (3.3.4).
- String invIdRef = fValidationState.checkIDRefID();
+ Iterator invIdRefs = fValidationState.checkIDRefID();
fValidationState.resetIDTables();
- if (invIdRef != null) {
- reportSchemaError("cvc-id.1", new Object[] { invIdRef });
+ if (invIdRefs != null) {
+ while (invIdRefs.hasNext()) {
+ reportSchemaError("cvc-id.1", new Object[] { invIdRefs.next() });
+ }
}
// check extra schema constraints
if (fFullChecking && !fUseGrammarPoolOnly) {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org