You are viewing a plain text version of this content. The canonical link for it is here.
Posted to j-dev@xerces.apache.org by "George Cristian Bina (JIRA)" <xe...@xml.apache.org> on 2005/08/04 14:07:35 UTC
[jira] Created: (XERCESJ-1092) Better error reporting for identity constraint errors
Better error reporting for identity constraint errors
-----------------------------------------------------
Key: XERCESJ-1092
URL: http://issues.apache.org/jira/browse/XERCESJ-1092
Project: Xerces2-J
Type: Improvement
Components: XML Schema Structures
Versions: 2.7.1
Environment: All
Reporter: George Cristian Bina
Most of the identity constraint errors are reported without specifying the identity constraint name, this becames a problem if there a many identity constraints defined as finding the one that fails can be difficult. Also a couple of error messages do not follow the format that most of the schema error message have, that is to specify the error code at the message start.
A proposed patch to fix these follows after a short description of the changes.
Message Key - actions
====================================================
AbsentKeyValue - added constraint name, place the error code first.
DuplicateField - NOT FOUND!
DuplicateKey - added constraint name.
DuplicateUnique - added constraint name.
FieldMultipleMatch - added constraint name.
FixedDiffersFromActual -
KeyMatchesNillable - added constraint name, place the error code first.
KeyNotEnoughValues -
KeyNotFound -
KeyRefNotEnoughValues -
KeyRefOutOfScope -
KeyRefReferNotFound - NOT FOUND!
UniqueNotEnoughValues - added constraint name.
UnknownField - added constraint name and element name.
Patch (made against Xerces 2.7.1):
Index: src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties
===================================================================
RCS file: /home/cvspublic/xml-xerces/java/src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties,v
retrieving revision 1.78
diff -u -r1.78 XMLSchemaMessages.properties
--- src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties 14 Jun 2005 04:24:24 -0000 1.78
+++ src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties 4 Aug 2005 11:38:17 -0000
@@ -14,20 +14,20 @@
# Identity constraints
- AbsentKeyValue = Identity Constraint error (cvc-identity-constraint.4.2.1): element \"{0}\" has a key with no value.
+ AbsentKeyValue = cvc-identity-constraint.4.2.1: Element \"{0}\" has no value for the key \"{1}\".
DuplicateField = Duplicate match in scope for field \"{0}\".
- DuplicateKey = Duplicate key value [{0}] declared for identity constraint of element \"{1}\".
- DuplicateUnique = Duplicate unique value [{0}] declared for identity constraint of element \"{1}\".
- FieldMultipleMatch = Identity constraint error: field \"{0}\" matches more than one value within the scope of its selector; fields must match unique values.
+ DuplicateKey = Duplicate key value [{0}] declared for identity constraint \"{2}\" of element \"{1}\".
+ DuplicateUnique = Duplicate unique value [{0}] declared for identity constraint \"{2}\" of element \"{1}\".
+ FieldMultipleMatch = Identity constraint error for contatint \"{1}\": field \"{0}\" matches more than one value within the scope of its selector; fields must match unique values.
FixedDiffersFromActual = The content of this element is not equivalent to the value of the \"fixed\" attribute in the element's declaration in the schema.
- KeyMatchesNillable = Identity Constraint error (cvc-identity-constraint.4.2.3): element \"{0}\" has a key which matches an element which has nillable set to true.
+ KeyMatchesNillable = cvc-identity-constraint.4.2.3: element \"{0}\" has the key \"{1}\" which matches an element which has nillable set to true.
KeyNotEnoughValues = Not enough values specified for <key name=\"{1}\"> identity constraint specified for element \"{0}\".
KeyNotFound = Key ''{0}'' with value ''{1}'' not found for identity constraint of element ''{2}''.
KeyRefNotEnoughValues = Not enough values specified for <keyref name=\"{1}\"> identity constraint specified for element \"{0}\".
KeyRefOutOfScope = Identity Constraint error: identity constraint \"{0}\" has a keyref which refers to a key or unique that is out of scope.
KeyRefReferNotFound = Key reference declaration \"{0}\" refers to unknown key with name \"{1}\".
- UniqueNotEnoughValues = Not enough values specified for <unique> identity constraint specified for element \"{0}\".
- UnknownField = Internal identity constraint error; unknown field \"{0}\".
+ UniqueNotEnoughValues = Not enough values specified for <unique> identity constraint \"{1}\" specified for element \"{0}\".
+ UnknownField = Internal identity constraint error; unknown field \"{0}\" for identity constraint \"{1}\" specified for element \"{2}\".
# Ideally, we should only use the following error keys, not the ones under
# "Identity constraints". And we should cover all of the following errors.
Index: src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
===================================================================
RCS file: /home/cvspublic/xml-xerces/java/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java,v
retrieving revision 1.179
diff -u -r1.179 XMLSchemaValidator.java
--- src/org/apache/xerces/impl/xs/XMLSchemaValidator.java 24 Jul 2005 22:55:21 -0000 1.179
+++ src/org/apache/xerces/impl/xs/XMLSchemaValidator.java 4 Aug 2005 11:38:18 -0000
@@ -3400,7 +3400,8 @@
if (fIdentityConstraint.getCategory() == IdentityConstraint.IC_KEY) {
String code = "AbsentKeyValue";
String eName = fIdentityConstraint.getElementName();
- reportSchemaError(code, new Object[] { eName });
+ String cName = fIdentityConstraint.getIdentityConstraintName();
+ reportSchemaError(code, new Object[] { eName, cName });
}
return;
}
@@ -3412,7 +3413,8 @@
{
String code = "UniqueNotEnoughValues";
String ename = fIdentityConstraint.getElementName();
- reportSchemaError(code, new Object[] { ename });
+ String cName = fIdentityConstraint.getIdentityConstraintName();
+ reportSchemaError(code, new Object[] { ename, cName });
break;
}
case IdentityConstraint.IC_KEY :
@@ -3420,8 +3422,8 @@
String code = "KeyNotEnoughValues";
UniqueOrKey key = (UniqueOrKey) fIdentityConstraint;
String ename = fIdentityConstraint.getElementName();
- String kname = key.getIdentityConstraintName();
- reportSchemaError(code, new Object[] { ename, kname });
+ String cName = key.getIdentityConstraintName();
+ reportSchemaError(code, new Object[] { ename, cName });
break;
}
case IdentityConstraint.IC_KEYREF :
@@ -3429,8 +3431,8 @@
String code = "KeyRefNotEnoughValues";
KeyRef keyref = (KeyRef) fIdentityConstraint;
String ename = fIdentityConstraint.getElementName();
- String kname = (keyref.getKey()).getIdentityConstraintName();
- reportSchemaError(code, new Object[] { ename, kname });
+ String cName = (keyref.getKey()).getIdentityConstraintName();
+ reportSchemaError(code, new Object[] { ename, cName });
break;
}
}
@@ -3484,13 +3486,16 @@
}
// do we even know this field?
if (i == -1) {
- String code = "UnknownField";
- reportSchemaError(code, new Object[] { field.toString()});
+ String code = "UnknownField";
+ String cName = fIdentityConstraint.getIdentityConstraintName();
+ String eName = fIdentityConstraint.getElementName();
+ reportSchemaError(code, new Object[] { field.toString(), cName, eName});
return;
}
if (Boolean.TRUE != mayMatch(field)) {
String code = "FieldMultipleMatch";
- reportSchemaError(code, new Object[] { field.toString()});
+ String cName = fIdentityConstraint.getIdentityConstraintName();
+ reportSchemaError(code, new Object[] { field.toString(), cName});
} else {
fValuesCount++;
}
@@ -3772,7 +3777,8 @@
String code = "DuplicateUnique";
String value = toString(fLocalValues);
String ename = fIdentityConstraint.getElementName();
- reportSchemaError(code, new Object[] { value, ename });
+ String cName = fIdentityConstraint.getIdentityConstraintName();
+ reportSchemaError(code, new Object[] { value, ename, cName });
}
} // duplicateValue(Hashtable)
@@ -3808,7 +3814,8 @@
String code = "DuplicateKey";
String value = toString(fLocalValues);
String ename = fIdentityConstraint.getElementName();
- reportSchemaError(code, new Object[] { value, ename });
+ String cName = fIdentityConstraint.getIdentityConstraintName();
+ reportSchemaError(code, new Object[] { value, ename, cName });
}
} // duplicateValue(Hashtable)
Index: src/org/apache/xerces/impl/xs/identity/Field.java
===================================================================
RCS file: /home/cvspublic/xml-xerces/java/src/org/apache/xerces/impl/xs/identity/Field.java,v
retrieving revision 1.20
diff -u -r1.20 Field.java
--- src/org/apache/xerces/impl/xs/identity/Field.java 25 May 2005 02:28:39 -0000 1.20
+++ src/org/apache/xerces/impl/xs/identity/Field.java 4 Aug 2005 11:38:18 -0000
@@ -173,7 +173,8 @@
super.matched(actualValue, valueType, itemValueType, isNil);
if(isNil && (fIdentityConstraint.getCategory() == IdentityConstraint.IC_KEY)) {
String code = "KeyMatchesNillable";
- fStore.reportError(code, new Object[]{fIdentityConstraint.getElementName()});
+ fStore.reportError(code,
+ new Object[]{fIdentityConstraint.getElementName(), fIdentityConstraint.getIdentityConstraintName()});
}
fStore.addValue(Field.this, actualValue, convertToPrimitiveKind(valueType), convertToPrimitiveKind(itemValueType));
// once we've stored the value for this field, we set the mayMatch
Thanks,
George
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org
[jira] Commented: (XERCESJ-1092) Better error reporting for identity constraint errors
Posted by "George Cristian Bina (JIRA)" <xe...@xml.apache.org>.
[ http://issues.apache.org/jira/browse/XERCESJ-1092?page=comments#action_12319039 ]
George Cristian Bina commented on XERCESJ-1092:
-----------------------------------------------
Hi Michael,
I sent a fax with a signed CLA.
Thanks,
George
> Better error reporting for identity constraint errors
> -----------------------------------------------------
>
> Key: XERCESJ-1092
> URL: http://issues.apache.org/jira/browse/XERCESJ-1092
> Project: Xerces2-J
> Type: Improvement
> Components: XML Schema Structures
> Versions: 2.7.1
> Environment: All
> Reporter: George Cristian Bina
>
> Most of the identity constraint errors are reported without specifying the identity constraint name, this becames a problem if there a many identity constraints defined as finding the one that fails can be difficult. Also a couple of error messages do not follow the format that most of the schema error message have, that is to specify the error code at the message start.
> A proposed patch to fix these follows after a short description of the changes.
> Message Key - actions
> ====================================================
> AbsentKeyValue - added constraint name, place the error code first.
> DuplicateField - NOT FOUND!
> DuplicateKey - added constraint name.
> DuplicateUnique - added constraint name.
> FieldMultipleMatch - added constraint name.
> FixedDiffersFromActual -
> KeyMatchesNillable - added constraint name, place the error code first.
> KeyNotEnoughValues -
> KeyNotFound -
> KeyRefNotEnoughValues -
> KeyRefOutOfScope -
> KeyRefReferNotFound - NOT FOUND!
> UniqueNotEnoughValues - added constraint name.
> UnknownField - added constraint name and element name.
> Patch (made against Xerces 2.7.1):
> Index: src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties
> ===================================================================
> RCS file: /home/cvspublic/xml-xerces/java/src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties,v
> retrieving revision 1.78
> diff -u -r1.78 XMLSchemaMessages.properties
> --- src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties 14 Jun 2005 04:24:24 -0000 1.78
> +++ src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties 4 Aug 2005 11:38:17 -0000
> @@ -14,20 +14,20 @@
>
> # Identity constraints
>
> - AbsentKeyValue = Identity Constraint error (cvc-identity-constraint.4.2.1): element \"{0}\" has a key with no value.
> + AbsentKeyValue = cvc-identity-constraint.4.2.1: Element \"{0}\" has no value for the key \"{1}\".
> DuplicateField = Duplicate match in scope for field \"{0}\".
> - DuplicateKey = Duplicate key value [{0}] declared for identity constraint of element \"{1}\".
> - DuplicateUnique = Duplicate unique value [{0}] declared for identity constraint of element \"{1}\".
> - FieldMultipleMatch = Identity constraint error: field \"{0}\" matches more than one value within the scope of its selector; fields must match unique values.
> + DuplicateKey = Duplicate key value [{0}] declared for identity constraint \"{2}\" of element \"{1}\".
> + DuplicateUnique = Duplicate unique value [{0}] declared for identity constraint \"{2}\" of element \"{1}\".
> + FieldMultipleMatch = Identity constraint error for contatint \"{1}\": field \"{0}\" matches more than one value within the scope of its selector; fields must match unique values.
> FixedDiffersFromActual = The content of this element is not equivalent to the value of the \"fixed\" attribute in the element's declaration in the schema.
> - KeyMatchesNillable = Identity Constraint error (cvc-identity-constraint.4.2.3): element \"{0}\" has a key which matches an element which has nillable set to true.
> + KeyMatchesNillable = cvc-identity-constraint.4.2.3: element \"{0}\" has the key \"{1}\" which matches an element which has nillable set to true.
> KeyNotEnoughValues = Not enough values specified for <key name=\"{1}\"> identity constraint specified for element \"{0}\".
> KeyNotFound = Key ''{0}'' with value ''{1}'' not found for identity constraint of element ''{2}''.
> KeyRefNotEnoughValues = Not enough values specified for <keyref name=\"{1}\"> identity constraint specified for element \"{0}\".
> KeyRefOutOfScope = Identity Constraint error: identity constraint \"{0}\" has a keyref which refers to a key or unique that is out of scope.
> KeyRefReferNotFound = Key reference declaration \"{0}\" refers to unknown key with name \"{1}\".
> - UniqueNotEnoughValues = Not enough values specified for <unique> identity constraint specified for element \"{0}\".
> - UnknownField = Internal identity constraint error; unknown field \"{0}\".
> + UniqueNotEnoughValues = Not enough values specified for <unique> identity constraint \"{1}\" specified for element \"{0}\".
> + UnknownField = Internal identity constraint error; unknown field \"{0}\" for identity constraint \"{1}\" specified for element \"{2}\".
>
> # Ideally, we should only use the following error keys, not the ones under
> # "Identity constraints". And we should cover all of the following errors.
> Index: src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
> ===================================================================
> RCS file: /home/cvspublic/xml-xerces/java/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java,v
> retrieving revision 1.179
> diff -u -r1.179 XMLSchemaValidator.java
> --- src/org/apache/xerces/impl/xs/XMLSchemaValidator.java 24 Jul 2005 22:55:21 -0000 1.179
> +++ src/org/apache/xerces/impl/xs/XMLSchemaValidator.java 4 Aug 2005 11:38:18 -0000
> @@ -3400,7 +3400,8 @@
> if (fIdentityConstraint.getCategory() == IdentityConstraint.IC_KEY) {
> String code = "AbsentKeyValue";
> String eName = fIdentityConstraint.getElementName();
> - reportSchemaError(code, new Object[] { eName });
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { eName, cName });
> }
> return;
> }
> @@ -3412,7 +3413,8 @@
> {
> String code = "UniqueNotEnoughValues";
> String ename = fIdentityConstraint.getElementName();
> - reportSchemaError(code, new Object[] { ename });
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { ename, cName });
> break;
> }
> case IdentityConstraint.IC_KEY :
> @@ -3420,8 +3422,8 @@
> String code = "KeyNotEnoughValues";
> UniqueOrKey key = (UniqueOrKey) fIdentityConstraint;
> String ename = fIdentityConstraint.getElementName();
> - String kname = key.getIdentityConstraintName();
> - reportSchemaError(code, new Object[] { ename, kname });
> + String cName = key.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { ename, cName });
> break;
> }
> case IdentityConstraint.IC_KEYREF :
> @@ -3429,8 +3431,8 @@
> String code = "KeyRefNotEnoughValues";
> KeyRef keyref = (KeyRef) fIdentityConstraint;
> String ename = fIdentityConstraint.getElementName();
> - String kname = (keyref.getKey()).getIdentityConstraintName();
> - reportSchemaError(code, new Object[] { ename, kname });
> + String cName = (keyref.getKey()).getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { ename, cName });
> break;
> }
> }
> @@ -3484,13 +3486,16 @@
> }
> // do we even know this field?
> if (i == -1) {
> - String code = "UnknownField";
> - reportSchemaError(code, new Object[] { field.toString()});
> + String code = "UnknownField";
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + String eName = fIdentityConstraint.getElementName();
> + reportSchemaError(code, new Object[] { field.toString(), cName, eName});
> return;
> }
> if (Boolean.TRUE != mayMatch(field)) {
> String code = "FieldMultipleMatch";
> - reportSchemaError(code, new Object[] { field.toString()});
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { field.toString(), cName});
> } else {
> fValuesCount++;
> }
> @@ -3772,7 +3777,8 @@
> String code = "DuplicateUnique";
> String value = toString(fLocalValues);
> String ename = fIdentityConstraint.getElementName();
> - reportSchemaError(code, new Object[] { value, ename });
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { value, ename, cName });
> }
> } // duplicateValue(Hashtable)
>
> @@ -3808,7 +3814,8 @@
> String code = "DuplicateKey";
> String value = toString(fLocalValues);
> String ename = fIdentityConstraint.getElementName();
> - reportSchemaError(code, new Object[] { value, ename });
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { value, ename, cName });
> }
> } // duplicateValue(Hashtable)
>
> Index: src/org/apache/xerces/impl/xs/identity/Field.java
> ===================================================================
> RCS file: /home/cvspublic/xml-xerces/java/src/org/apache/xerces/impl/xs/identity/Field.java,v
> retrieving revision 1.20
> diff -u -r1.20 Field.java
> --- src/org/apache/xerces/impl/xs/identity/Field.java 25 May 2005 02:28:39 -0000 1.20
> +++ src/org/apache/xerces/impl/xs/identity/Field.java 4 Aug 2005 11:38:18 -0000
> @@ -173,7 +173,8 @@
> super.matched(actualValue, valueType, itemValueType, isNil);
> if(isNil && (fIdentityConstraint.getCategory() == IdentityConstraint.IC_KEY)) {
> String code = "KeyMatchesNillable";
> - fStore.reportError(code, new Object[]{fIdentityConstraint.getElementName()});
> + fStore.reportError(code,
> + new Object[]{fIdentityConstraint.getElementName(), fIdentityConstraint.getIdentityConstraintName()});
> }
> fStore.addValue(Field.this, actualValue, convertToPrimitiveKind(valueType), convertToPrimitiveKind(itemValueType));
> // once we've stored the value for this field, we set the mayMatch
> Thanks,
> George
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org
[jira] Resolved: (XERCESJ-1092) Better error reporting for identity
constraint errors
Posted by "Michael Glavassevich (JIRA)" <xe...@xml.apache.org>.
[ http://issues.apache.org/jira/browse/XERCESJ-1092?page=all ]
Michael Glavassevich resolved XERCESJ-1092:
-------------------------------------------
Resolution: Fixed
Thanks George. I've committed your patch to SVN (with some minor modifications).
> Better error reporting for identity constraint errors
> -----------------------------------------------------
>
> Key: XERCESJ-1092
> URL: http://issues.apache.org/jira/browse/XERCESJ-1092
> Project: Xerces2-J
> Type: Improvement
> Components: XML Schema Structures
> Versions: 2.7.1
> Environment: All
> Reporter: George Cristian Bina
> Assignee: Michael Glavassevich
>
> Most of the identity constraint errors are reported without specifying the identity constraint name, this becames a problem if there a many identity constraints defined as finding the one that fails can be difficult. Also a couple of error messages do not follow the format that most of the schema error message have, that is to specify the error code at the message start.
> A proposed patch to fix these follows after a short description of the changes.
> Message Key - actions
> ====================================================
> AbsentKeyValue - added constraint name, place the error code first.
> DuplicateField - NOT FOUND!
> DuplicateKey - added constraint name.
> DuplicateUnique - added constraint name.
> FieldMultipleMatch - added constraint name.
> FixedDiffersFromActual -
> KeyMatchesNillable - added constraint name, place the error code first.
> KeyNotEnoughValues -
> KeyNotFound -
> KeyRefNotEnoughValues -
> KeyRefOutOfScope -
> KeyRefReferNotFound - NOT FOUND!
> UniqueNotEnoughValues - added constraint name.
> UnknownField - added constraint name and element name.
> Patch (made against Xerces 2.7.1):
> Index: src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties
> ===================================================================
> RCS file: /home/cvspublic/xml-xerces/java/src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties,v
> retrieving revision 1.78
> diff -u -r1.78 XMLSchemaMessages.properties
> --- src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties 14 Jun 2005 04:24:24 -0000 1.78
> +++ src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties 4 Aug 2005 11:38:17 -0000
> @@ -14,20 +14,20 @@
>
> # Identity constraints
>
> - AbsentKeyValue = Identity Constraint error (cvc-identity-constraint.4.2.1): element \"{0}\" has a key with no value.
> + AbsentKeyValue = cvc-identity-constraint.4.2.1: Element \"{0}\" has no value for the key \"{1}\".
> DuplicateField = Duplicate match in scope for field \"{0}\".
> - DuplicateKey = Duplicate key value [{0}] declared for identity constraint of element \"{1}\".
> - DuplicateUnique = Duplicate unique value [{0}] declared for identity constraint of element \"{1}\".
> - FieldMultipleMatch = Identity constraint error: field \"{0}\" matches more than one value within the scope of its selector; fields must match unique values.
> + DuplicateKey = Duplicate key value [{0}] declared for identity constraint \"{2}\" of element \"{1}\".
> + DuplicateUnique = Duplicate unique value [{0}] declared for identity constraint \"{2}\" of element \"{1}\".
> + FieldMultipleMatch = Identity constraint error for contatint \"{1}\": field \"{0}\" matches more than one value within the scope of its selector; fields must match unique values.
> FixedDiffersFromActual = The content of this element is not equivalent to the value of the \"fixed\" attribute in the element's declaration in the schema.
> - KeyMatchesNillable = Identity Constraint error (cvc-identity-constraint.4.2.3): element \"{0}\" has a key which matches an element which has nillable set to true.
> + KeyMatchesNillable = cvc-identity-constraint.4.2.3: element \"{0}\" has the key \"{1}\" which matches an element which has nillable set to true.
> KeyNotEnoughValues = Not enough values specified for <key name=\"{1}\"> identity constraint specified for element \"{0}\".
> KeyNotFound = Key ''{0}'' with value ''{1}'' not found for identity constraint of element ''{2}''.
> KeyRefNotEnoughValues = Not enough values specified for <keyref name=\"{1}\"> identity constraint specified for element \"{0}\".
> KeyRefOutOfScope = Identity Constraint error: identity constraint \"{0}\" has a keyref which refers to a key or unique that is out of scope.
> KeyRefReferNotFound = Key reference declaration \"{0}\" refers to unknown key with name \"{1}\".
> - UniqueNotEnoughValues = Not enough values specified for <unique> identity constraint specified for element \"{0}\".
> - UnknownField = Internal identity constraint error; unknown field \"{0}\".
> + UniqueNotEnoughValues = Not enough values specified for <unique> identity constraint \"{1}\" specified for element \"{0}\".
> + UnknownField = Internal identity constraint error; unknown field \"{0}\" for identity constraint \"{1}\" specified for element \"{2}\".
>
> # Ideally, we should only use the following error keys, not the ones under
> # "Identity constraints". And we should cover all of the following errors.
> Index: src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
> ===================================================================
> RCS file: /home/cvspublic/xml-xerces/java/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java,v
> retrieving revision 1.179
> diff -u -r1.179 XMLSchemaValidator.java
> --- src/org/apache/xerces/impl/xs/XMLSchemaValidator.java 24 Jul 2005 22:55:21 -0000 1.179
> +++ src/org/apache/xerces/impl/xs/XMLSchemaValidator.java 4 Aug 2005 11:38:18 -0000
> @@ -3400,7 +3400,8 @@
> if (fIdentityConstraint.getCategory() == IdentityConstraint.IC_KEY) {
> String code = "AbsentKeyValue";
> String eName = fIdentityConstraint.getElementName();
> - reportSchemaError(code, new Object[] { eName });
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { eName, cName });
> }
> return;
> }
> @@ -3412,7 +3413,8 @@
> {
> String code = "UniqueNotEnoughValues";
> String ename = fIdentityConstraint.getElementName();
> - reportSchemaError(code, new Object[] { ename });
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { ename, cName });
> break;
> }
> case IdentityConstraint.IC_KEY :
> @@ -3420,8 +3422,8 @@
> String code = "KeyNotEnoughValues";
> UniqueOrKey key = (UniqueOrKey) fIdentityConstraint;
> String ename = fIdentityConstraint.getElementName();
> - String kname = key.getIdentityConstraintName();
> - reportSchemaError(code, new Object[] { ename, kname });
> + String cName = key.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { ename, cName });
> break;
> }
> case IdentityConstraint.IC_KEYREF :
> @@ -3429,8 +3431,8 @@
> String code = "KeyRefNotEnoughValues";
> KeyRef keyref = (KeyRef) fIdentityConstraint;
> String ename = fIdentityConstraint.getElementName();
> - String kname = (keyref.getKey()).getIdentityConstraintName();
> - reportSchemaError(code, new Object[] { ename, kname });
> + String cName = (keyref.getKey()).getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { ename, cName });
> break;
> }
> }
> @@ -3484,13 +3486,16 @@
> }
> // do we even know this field?
> if (i == -1) {
> - String code = "UnknownField";
> - reportSchemaError(code, new Object[] { field.toString()});
> + String code = "UnknownField";
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + String eName = fIdentityConstraint.getElementName();
> + reportSchemaError(code, new Object[] { field.toString(), cName, eName});
> return;
> }
> if (Boolean.TRUE != mayMatch(field)) {
> String code = "FieldMultipleMatch";
> - reportSchemaError(code, new Object[] { field.toString()});
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { field.toString(), cName});
> } else {
> fValuesCount++;
> }
> @@ -3772,7 +3777,8 @@
> String code = "DuplicateUnique";
> String value = toString(fLocalValues);
> String ename = fIdentityConstraint.getElementName();
> - reportSchemaError(code, new Object[] { value, ename });
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { value, ename, cName });
> }
> } // duplicateValue(Hashtable)
>
> @@ -3808,7 +3814,8 @@
> String code = "DuplicateKey";
> String value = toString(fLocalValues);
> String ename = fIdentityConstraint.getElementName();
> - reportSchemaError(code, new Object[] { value, ename });
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { value, ename, cName });
> }
> } // duplicateValue(Hashtable)
>
> Index: src/org/apache/xerces/impl/xs/identity/Field.java
> ===================================================================
> RCS file: /home/cvspublic/xml-xerces/java/src/org/apache/xerces/impl/xs/identity/Field.java,v
> retrieving revision 1.20
> diff -u -r1.20 Field.java
> --- src/org/apache/xerces/impl/xs/identity/Field.java 25 May 2005 02:28:39 -0000 1.20
> +++ src/org/apache/xerces/impl/xs/identity/Field.java 4 Aug 2005 11:38:18 -0000
> @@ -173,7 +173,8 @@
> super.matched(actualValue, valueType, itemValueType, isNil);
> if(isNil && (fIdentityConstraint.getCategory() == IdentityConstraint.IC_KEY)) {
> String code = "KeyMatchesNillable";
> - fStore.reportError(code, new Object[]{fIdentityConstraint.getElementName()});
> + fStore.reportError(code,
> + new Object[]{fIdentityConstraint.getElementName(), fIdentityConstraint.getIdentityConstraintName()});
> }
> fStore.addValue(Field.this, actualValue, convertToPrimitiveKind(valueType), convertToPrimitiveKind(itemValueType));
> // once we've stored the value for this field, we set the mayMatch
> Thanks,
> George
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org
[jira] Assigned: (XERCESJ-1092) Better error reporting for identity
constraint errors
Posted by "Michael Glavassevich (JIRA)" <xe...@xml.apache.org>.
[ http://issues.apache.org/jira/browse/XERCESJ-1092?page=all ]
Michael Glavassevich reassigned XERCESJ-1092:
---------------------------------------------
Assign To: Michael Glavassevich
> Better error reporting for identity constraint errors
> -----------------------------------------------------
>
> Key: XERCESJ-1092
> URL: http://issues.apache.org/jira/browse/XERCESJ-1092
> Project: Xerces2-J
> Type: Improvement
> Components: XML Schema Structures
> Versions: 2.7.1
> Environment: All
> Reporter: George Cristian Bina
> Assignee: Michael Glavassevich
>
> Most of the identity constraint errors are reported without specifying the identity constraint name, this becames a problem if there a many identity constraints defined as finding the one that fails can be difficult. Also a couple of error messages do not follow the format that most of the schema error message have, that is to specify the error code at the message start.
> A proposed patch to fix these follows after a short description of the changes.
> Message Key - actions
> ====================================================
> AbsentKeyValue - added constraint name, place the error code first.
> DuplicateField - NOT FOUND!
> DuplicateKey - added constraint name.
> DuplicateUnique - added constraint name.
> FieldMultipleMatch - added constraint name.
> FixedDiffersFromActual -
> KeyMatchesNillable - added constraint name, place the error code first.
> KeyNotEnoughValues -
> KeyNotFound -
> KeyRefNotEnoughValues -
> KeyRefOutOfScope -
> KeyRefReferNotFound - NOT FOUND!
> UniqueNotEnoughValues - added constraint name.
> UnknownField - added constraint name and element name.
> Patch (made against Xerces 2.7.1):
> Index: src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties
> ===================================================================
> RCS file: /home/cvspublic/xml-xerces/java/src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties,v
> retrieving revision 1.78
> diff -u -r1.78 XMLSchemaMessages.properties
> --- src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties 14 Jun 2005 04:24:24 -0000 1.78
> +++ src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties 4 Aug 2005 11:38:17 -0000
> @@ -14,20 +14,20 @@
>
> # Identity constraints
>
> - AbsentKeyValue = Identity Constraint error (cvc-identity-constraint.4.2.1): element \"{0}\" has a key with no value.
> + AbsentKeyValue = cvc-identity-constraint.4.2.1: Element \"{0}\" has no value for the key \"{1}\".
> DuplicateField = Duplicate match in scope for field \"{0}\".
> - DuplicateKey = Duplicate key value [{0}] declared for identity constraint of element \"{1}\".
> - DuplicateUnique = Duplicate unique value [{0}] declared for identity constraint of element \"{1}\".
> - FieldMultipleMatch = Identity constraint error: field \"{0}\" matches more than one value within the scope of its selector; fields must match unique values.
> + DuplicateKey = Duplicate key value [{0}] declared for identity constraint \"{2}\" of element \"{1}\".
> + DuplicateUnique = Duplicate unique value [{0}] declared for identity constraint \"{2}\" of element \"{1}\".
> + FieldMultipleMatch = Identity constraint error for contatint \"{1}\": field \"{0}\" matches more than one value within the scope of its selector; fields must match unique values.
> FixedDiffersFromActual = The content of this element is not equivalent to the value of the \"fixed\" attribute in the element's declaration in the schema.
> - KeyMatchesNillable = Identity Constraint error (cvc-identity-constraint.4.2.3): element \"{0}\" has a key which matches an element which has nillable set to true.
> + KeyMatchesNillable = cvc-identity-constraint.4.2.3: element \"{0}\" has the key \"{1}\" which matches an element which has nillable set to true.
> KeyNotEnoughValues = Not enough values specified for <key name=\"{1}\"> identity constraint specified for element \"{0}\".
> KeyNotFound = Key ''{0}'' with value ''{1}'' not found for identity constraint of element ''{2}''.
> KeyRefNotEnoughValues = Not enough values specified for <keyref name=\"{1}\"> identity constraint specified for element \"{0}\".
> KeyRefOutOfScope = Identity Constraint error: identity constraint \"{0}\" has a keyref which refers to a key or unique that is out of scope.
> KeyRefReferNotFound = Key reference declaration \"{0}\" refers to unknown key with name \"{1}\".
> - UniqueNotEnoughValues = Not enough values specified for <unique> identity constraint specified for element \"{0}\".
> - UnknownField = Internal identity constraint error; unknown field \"{0}\".
> + UniqueNotEnoughValues = Not enough values specified for <unique> identity constraint \"{1}\" specified for element \"{0}\".
> + UnknownField = Internal identity constraint error; unknown field \"{0}\" for identity constraint \"{1}\" specified for element \"{2}\".
>
> # Ideally, we should only use the following error keys, not the ones under
> # "Identity constraints". And we should cover all of the following errors.
> Index: src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
> ===================================================================
> RCS file: /home/cvspublic/xml-xerces/java/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java,v
> retrieving revision 1.179
> diff -u -r1.179 XMLSchemaValidator.java
> --- src/org/apache/xerces/impl/xs/XMLSchemaValidator.java 24 Jul 2005 22:55:21 -0000 1.179
> +++ src/org/apache/xerces/impl/xs/XMLSchemaValidator.java 4 Aug 2005 11:38:18 -0000
> @@ -3400,7 +3400,8 @@
> if (fIdentityConstraint.getCategory() == IdentityConstraint.IC_KEY) {
> String code = "AbsentKeyValue";
> String eName = fIdentityConstraint.getElementName();
> - reportSchemaError(code, new Object[] { eName });
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { eName, cName });
> }
> return;
> }
> @@ -3412,7 +3413,8 @@
> {
> String code = "UniqueNotEnoughValues";
> String ename = fIdentityConstraint.getElementName();
> - reportSchemaError(code, new Object[] { ename });
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { ename, cName });
> break;
> }
> case IdentityConstraint.IC_KEY :
> @@ -3420,8 +3422,8 @@
> String code = "KeyNotEnoughValues";
> UniqueOrKey key = (UniqueOrKey) fIdentityConstraint;
> String ename = fIdentityConstraint.getElementName();
> - String kname = key.getIdentityConstraintName();
> - reportSchemaError(code, new Object[] { ename, kname });
> + String cName = key.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { ename, cName });
> break;
> }
> case IdentityConstraint.IC_KEYREF :
> @@ -3429,8 +3431,8 @@
> String code = "KeyRefNotEnoughValues";
> KeyRef keyref = (KeyRef) fIdentityConstraint;
> String ename = fIdentityConstraint.getElementName();
> - String kname = (keyref.getKey()).getIdentityConstraintName();
> - reportSchemaError(code, new Object[] { ename, kname });
> + String cName = (keyref.getKey()).getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { ename, cName });
> break;
> }
> }
> @@ -3484,13 +3486,16 @@
> }
> // do we even know this field?
> if (i == -1) {
> - String code = "UnknownField";
> - reportSchemaError(code, new Object[] { field.toString()});
> + String code = "UnknownField";
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + String eName = fIdentityConstraint.getElementName();
> + reportSchemaError(code, new Object[] { field.toString(), cName, eName});
> return;
> }
> if (Boolean.TRUE != mayMatch(field)) {
> String code = "FieldMultipleMatch";
> - reportSchemaError(code, new Object[] { field.toString()});
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { field.toString(), cName});
> } else {
> fValuesCount++;
> }
> @@ -3772,7 +3777,8 @@
> String code = "DuplicateUnique";
> String value = toString(fLocalValues);
> String ename = fIdentityConstraint.getElementName();
> - reportSchemaError(code, new Object[] { value, ename });
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { value, ename, cName });
> }
> } // duplicateValue(Hashtable)
>
> @@ -3808,7 +3814,8 @@
> String code = "DuplicateKey";
> String value = toString(fLocalValues);
> String ename = fIdentityConstraint.getElementName();
> - reportSchemaError(code, new Object[] { value, ename });
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { value, ename, cName });
> }
> } // duplicateValue(Hashtable)
>
> Index: src/org/apache/xerces/impl/xs/identity/Field.java
> ===================================================================
> RCS file: /home/cvspublic/xml-xerces/java/src/org/apache/xerces/impl/xs/identity/Field.java,v
> retrieving revision 1.20
> diff -u -r1.20 Field.java
> --- src/org/apache/xerces/impl/xs/identity/Field.java 25 May 2005 02:28:39 -0000 1.20
> +++ src/org/apache/xerces/impl/xs/identity/Field.java 4 Aug 2005 11:38:18 -0000
> @@ -173,7 +173,8 @@
> super.matched(actualValue, valueType, itemValueType, isNil);
> if(isNil && (fIdentityConstraint.getCategory() == IdentityConstraint.IC_KEY)) {
> String code = "KeyMatchesNillable";
> - fStore.reportError(code, new Object[]{fIdentityConstraint.getElementName()});
> + fStore.reportError(code,
> + new Object[]{fIdentityConstraint.getElementName(), fIdentityConstraint.getIdentityConstraintName()});
> }
> fStore.addValue(Field.this, actualValue, convertToPrimitiveKind(valueType), convertToPrimitiveKind(itemValueType));
> // once we've stored the value for this field, we set the mayMatch
> Thanks,
> George
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org
[jira] Updated: (XERCESJ-1092) Better error reporting for identity
constraint errors
Posted by "Michael Glavassevich (JIRA)" <xe...@xml.apache.org>.
[ http://issues.apache.org/jira/browse/XERCESJ-1092?page=all ]
Michael Glavassevich updated XERCESJ-1092:
------------------------------------------
Fix Version: 2.8.0
> Better error reporting for identity constraint errors
> -----------------------------------------------------
>
> Key: XERCESJ-1092
> URL: http://issues.apache.org/jira/browse/XERCESJ-1092
> Project: Xerces2-J
> Type: Improvement
> Components: XML Schema Structures
> Versions: 2.7.1
> Environment: All
> Reporter: George Cristian Bina
> Assignee: Michael Glavassevich
> Fix For: 2.8.0
>
> Most of the identity constraint errors are reported without specifying the identity constraint name, this becames a problem if there a many identity constraints defined as finding the one that fails can be difficult. Also a couple of error messages do not follow the format that most of the schema error message have, that is to specify the error code at the message start.
> A proposed patch to fix these follows after a short description of the changes.
> Message Key - actions
> ====================================================
> AbsentKeyValue - added constraint name, place the error code first.
> DuplicateField - NOT FOUND!
> DuplicateKey - added constraint name.
> DuplicateUnique - added constraint name.
> FieldMultipleMatch - added constraint name.
> FixedDiffersFromActual -
> KeyMatchesNillable - added constraint name, place the error code first.
> KeyNotEnoughValues -
> KeyNotFound -
> KeyRefNotEnoughValues -
> KeyRefOutOfScope -
> KeyRefReferNotFound - NOT FOUND!
> UniqueNotEnoughValues - added constraint name.
> UnknownField - added constraint name and element name.
> Patch (made against Xerces 2.7.1):
> Index: src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties
> ===================================================================
> RCS file: /home/cvspublic/xml-xerces/java/src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties,v
> retrieving revision 1.78
> diff -u -r1.78 XMLSchemaMessages.properties
> --- src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties 14 Jun 2005 04:24:24 -0000 1.78
> +++ src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties 4 Aug 2005 11:38:17 -0000
> @@ -14,20 +14,20 @@
>
> # Identity constraints
>
> - AbsentKeyValue = Identity Constraint error (cvc-identity-constraint.4.2.1): element \"{0}\" has a key with no value.
> + AbsentKeyValue = cvc-identity-constraint.4.2.1: Element \"{0}\" has no value for the key \"{1}\".
> DuplicateField = Duplicate match in scope for field \"{0}\".
> - DuplicateKey = Duplicate key value [{0}] declared for identity constraint of element \"{1}\".
> - DuplicateUnique = Duplicate unique value [{0}] declared for identity constraint of element \"{1}\".
> - FieldMultipleMatch = Identity constraint error: field \"{0}\" matches more than one value within the scope of its selector; fields must match unique values.
> + DuplicateKey = Duplicate key value [{0}] declared for identity constraint \"{2}\" of element \"{1}\".
> + DuplicateUnique = Duplicate unique value [{0}] declared for identity constraint \"{2}\" of element \"{1}\".
> + FieldMultipleMatch = Identity constraint error for contatint \"{1}\": field \"{0}\" matches more than one value within the scope of its selector; fields must match unique values.
> FixedDiffersFromActual = The content of this element is not equivalent to the value of the \"fixed\" attribute in the element's declaration in the schema.
> - KeyMatchesNillable = Identity Constraint error (cvc-identity-constraint.4.2.3): element \"{0}\" has a key which matches an element which has nillable set to true.
> + KeyMatchesNillable = cvc-identity-constraint.4.2.3: element \"{0}\" has the key \"{1}\" which matches an element which has nillable set to true.
> KeyNotEnoughValues = Not enough values specified for <key name=\"{1}\"> identity constraint specified for element \"{0}\".
> KeyNotFound = Key ''{0}'' with value ''{1}'' not found for identity constraint of element ''{2}''.
> KeyRefNotEnoughValues = Not enough values specified for <keyref name=\"{1}\"> identity constraint specified for element \"{0}\".
> KeyRefOutOfScope = Identity Constraint error: identity constraint \"{0}\" has a keyref which refers to a key or unique that is out of scope.
> KeyRefReferNotFound = Key reference declaration \"{0}\" refers to unknown key with name \"{1}\".
> - UniqueNotEnoughValues = Not enough values specified for <unique> identity constraint specified for element \"{0}\".
> - UnknownField = Internal identity constraint error; unknown field \"{0}\".
> + UniqueNotEnoughValues = Not enough values specified for <unique> identity constraint \"{1}\" specified for element \"{0}\".
> + UnknownField = Internal identity constraint error; unknown field \"{0}\" for identity constraint \"{1}\" specified for element \"{2}\".
>
> # Ideally, we should only use the following error keys, not the ones under
> # "Identity constraints". And we should cover all of the following errors.
> Index: src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
> ===================================================================
> RCS file: /home/cvspublic/xml-xerces/java/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java,v
> retrieving revision 1.179
> diff -u -r1.179 XMLSchemaValidator.java
> --- src/org/apache/xerces/impl/xs/XMLSchemaValidator.java 24 Jul 2005 22:55:21 -0000 1.179
> +++ src/org/apache/xerces/impl/xs/XMLSchemaValidator.java 4 Aug 2005 11:38:18 -0000
> @@ -3400,7 +3400,8 @@
> if (fIdentityConstraint.getCategory() == IdentityConstraint.IC_KEY) {
> String code = "AbsentKeyValue";
> String eName = fIdentityConstraint.getElementName();
> - reportSchemaError(code, new Object[] { eName });
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { eName, cName });
> }
> return;
> }
> @@ -3412,7 +3413,8 @@
> {
> String code = "UniqueNotEnoughValues";
> String ename = fIdentityConstraint.getElementName();
> - reportSchemaError(code, new Object[] { ename });
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { ename, cName });
> break;
> }
> case IdentityConstraint.IC_KEY :
> @@ -3420,8 +3422,8 @@
> String code = "KeyNotEnoughValues";
> UniqueOrKey key = (UniqueOrKey) fIdentityConstraint;
> String ename = fIdentityConstraint.getElementName();
> - String kname = key.getIdentityConstraintName();
> - reportSchemaError(code, new Object[] { ename, kname });
> + String cName = key.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { ename, cName });
> break;
> }
> case IdentityConstraint.IC_KEYREF :
> @@ -3429,8 +3431,8 @@
> String code = "KeyRefNotEnoughValues";
> KeyRef keyref = (KeyRef) fIdentityConstraint;
> String ename = fIdentityConstraint.getElementName();
> - String kname = (keyref.getKey()).getIdentityConstraintName();
> - reportSchemaError(code, new Object[] { ename, kname });
> + String cName = (keyref.getKey()).getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { ename, cName });
> break;
> }
> }
> @@ -3484,13 +3486,16 @@
> }
> // do we even know this field?
> if (i == -1) {
> - String code = "UnknownField";
> - reportSchemaError(code, new Object[] { field.toString()});
> + String code = "UnknownField";
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + String eName = fIdentityConstraint.getElementName();
> + reportSchemaError(code, new Object[] { field.toString(), cName, eName});
> return;
> }
> if (Boolean.TRUE != mayMatch(field)) {
> String code = "FieldMultipleMatch";
> - reportSchemaError(code, new Object[] { field.toString()});
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { field.toString(), cName});
> } else {
> fValuesCount++;
> }
> @@ -3772,7 +3777,8 @@
> String code = "DuplicateUnique";
> String value = toString(fLocalValues);
> String ename = fIdentityConstraint.getElementName();
> - reportSchemaError(code, new Object[] { value, ename });
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { value, ename, cName });
> }
> } // duplicateValue(Hashtable)
>
> @@ -3808,7 +3814,8 @@
> String code = "DuplicateKey";
> String value = toString(fLocalValues);
> String ename = fIdentityConstraint.getElementName();
> - reportSchemaError(code, new Object[] { value, ename });
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { value, ename, cName });
> }
> } // duplicateValue(Hashtable)
>
> Index: src/org/apache/xerces/impl/xs/identity/Field.java
> ===================================================================
> RCS file: /home/cvspublic/xml-xerces/java/src/org/apache/xerces/impl/xs/identity/Field.java,v
> retrieving revision 1.20
> diff -u -r1.20 Field.java
> --- src/org/apache/xerces/impl/xs/identity/Field.java 25 May 2005 02:28:39 -0000 1.20
> +++ src/org/apache/xerces/impl/xs/identity/Field.java 4 Aug 2005 11:38:18 -0000
> @@ -173,7 +173,8 @@
> super.matched(actualValue, valueType, itemValueType, isNil);
> if(isNil && (fIdentityConstraint.getCategory() == IdentityConstraint.IC_KEY)) {
> String code = "KeyMatchesNillable";
> - fStore.reportError(code, new Object[]{fIdentityConstraint.getElementName()});
> + fStore.reportError(code,
> + new Object[]{fIdentityConstraint.getElementName(), fIdentityConstraint.getIdentityConstraintName()});
> }
> fStore.addValue(Field.this, actualValue, convertToPrimitiveKind(valueType), convertToPrimitiveKind(itemValueType));
> // once we've stored the value for this field, we set the mayMatch
> Thanks,
> George
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org
[jira] Commented: (XERCESJ-1092) Better error reporting for identity constraint errors
Posted by "Michael Glavassevich (JIRA)" <xe...@xml.apache.org>.
[ http://issues.apache.org/jira/browse/XERCESJ-1092?page=comments#action_12318925 ]
Michael Glavassevich commented on XERCESJ-1092:
-----------------------------------------------
Hi George,
I couldn't find a CLA [1] on file for you. According to the Xerces charter [2] in order to accept new features (and other improvements) into the project, the developer contributing the code must have a CLA on file with Apache. Signing a CLA will cover this enhancement as well as future contributions.
[1] http://people.apache.org/~jim/committers.html
[2] http://xml.apache.org/xerces2-j/charter.html
> Better error reporting for identity constraint errors
> -----------------------------------------------------
>
> Key: XERCESJ-1092
> URL: http://issues.apache.org/jira/browse/XERCESJ-1092
> Project: Xerces2-J
> Type: Improvement
> Components: XML Schema Structures
> Versions: 2.7.1
> Environment: All
> Reporter: George Cristian Bina
>
> Most of the identity constraint errors are reported without specifying the identity constraint name, this becames a problem if there a many identity constraints defined as finding the one that fails can be difficult. Also a couple of error messages do not follow the format that most of the schema error message have, that is to specify the error code at the message start.
> A proposed patch to fix these follows after a short description of the changes.
> Message Key - actions
> ====================================================
> AbsentKeyValue - added constraint name, place the error code first.
> DuplicateField - NOT FOUND!
> DuplicateKey - added constraint name.
> DuplicateUnique - added constraint name.
> FieldMultipleMatch - added constraint name.
> FixedDiffersFromActual -
> KeyMatchesNillable - added constraint name, place the error code first.
> KeyNotEnoughValues -
> KeyNotFound -
> KeyRefNotEnoughValues -
> KeyRefOutOfScope -
> KeyRefReferNotFound - NOT FOUND!
> UniqueNotEnoughValues - added constraint name.
> UnknownField - added constraint name and element name.
> Patch (made against Xerces 2.7.1):
> Index: src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties
> ===================================================================
> RCS file: /home/cvspublic/xml-xerces/java/src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties,v
> retrieving revision 1.78
> diff -u -r1.78 XMLSchemaMessages.properties
> --- src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties 14 Jun 2005 04:24:24 -0000 1.78
> +++ src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties 4 Aug 2005 11:38:17 -0000
> @@ -14,20 +14,20 @@
>
> # Identity constraints
>
> - AbsentKeyValue = Identity Constraint error (cvc-identity-constraint.4.2.1): element \"{0}\" has a key with no value.
> + AbsentKeyValue = cvc-identity-constraint.4.2.1: Element \"{0}\" has no value for the key \"{1}\".
> DuplicateField = Duplicate match in scope for field \"{0}\".
> - DuplicateKey = Duplicate key value [{0}] declared for identity constraint of element \"{1}\".
> - DuplicateUnique = Duplicate unique value [{0}] declared for identity constraint of element \"{1}\".
> - FieldMultipleMatch = Identity constraint error: field \"{0}\" matches more than one value within the scope of its selector; fields must match unique values.
> + DuplicateKey = Duplicate key value [{0}] declared for identity constraint \"{2}\" of element \"{1}\".
> + DuplicateUnique = Duplicate unique value [{0}] declared for identity constraint \"{2}\" of element \"{1}\".
> + FieldMultipleMatch = Identity constraint error for contatint \"{1}\": field \"{0}\" matches more than one value within the scope of its selector; fields must match unique values.
> FixedDiffersFromActual = The content of this element is not equivalent to the value of the \"fixed\" attribute in the element's declaration in the schema.
> - KeyMatchesNillable = Identity Constraint error (cvc-identity-constraint.4.2.3): element \"{0}\" has a key which matches an element which has nillable set to true.
> + KeyMatchesNillable = cvc-identity-constraint.4.2.3: element \"{0}\" has the key \"{1}\" which matches an element which has nillable set to true.
> KeyNotEnoughValues = Not enough values specified for <key name=\"{1}\"> identity constraint specified for element \"{0}\".
> KeyNotFound = Key ''{0}'' with value ''{1}'' not found for identity constraint of element ''{2}''.
> KeyRefNotEnoughValues = Not enough values specified for <keyref name=\"{1}\"> identity constraint specified for element \"{0}\".
> KeyRefOutOfScope = Identity Constraint error: identity constraint \"{0}\" has a keyref which refers to a key or unique that is out of scope.
> KeyRefReferNotFound = Key reference declaration \"{0}\" refers to unknown key with name \"{1}\".
> - UniqueNotEnoughValues = Not enough values specified for <unique> identity constraint specified for element \"{0}\".
> - UnknownField = Internal identity constraint error; unknown field \"{0}\".
> + UniqueNotEnoughValues = Not enough values specified for <unique> identity constraint \"{1}\" specified for element \"{0}\".
> + UnknownField = Internal identity constraint error; unknown field \"{0}\" for identity constraint \"{1}\" specified for element \"{2}\".
>
> # Ideally, we should only use the following error keys, not the ones under
> # "Identity constraints". And we should cover all of the following errors.
> Index: src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
> ===================================================================
> RCS file: /home/cvspublic/xml-xerces/java/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java,v
> retrieving revision 1.179
> diff -u -r1.179 XMLSchemaValidator.java
> --- src/org/apache/xerces/impl/xs/XMLSchemaValidator.java 24 Jul 2005 22:55:21 -0000 1.179
> +++ src/org/apache/xerces/impl/xs/XMLSchemaValidator.java 4 Aug 2005 11:38:18 -0000
> @@ -3400,7 +3400,8 @@
> if (fIdentityConstraint.getCategory() == IdentityConstraint.IC_KEY) {
> String code = "AbsentKeyValue";
> String eName = fIdentityConstraint.getElementName();
> - reportSchemaError(code, new Object[] { eName });
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { eName, cName });
> }
> return;
> }
> @@ -3412,7 +3413,8 @@
> {
> String code = "UniqueNotEnoughValues";
> String ename = fIdentityConstraint.getElementName();
> - reportSchemaError(code, new Object[] { ename });
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { ename, cName });
> break;
> }
> case IdentityConstraint.IC_KEY :
> @@ -3420,8 +3422,8 @@
> String code = "KeyNotEnoughValues";
> UniqueOrKey key = (UniqueOrKey) fIdentityConstraint;
> String ename = fIdentityConstraint.getElementName();
> - String kname = key.getIdentityConstraintName();
> - reportSchemaError(code, new Object[] { ename, kname });
> + String cName = key.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { ename, cName });
> break;
> }
> case IdentityConstraint.IC_KEYREF :
> @@ -3429,8 +3431,8 @@
> String code = "KeyRefNotEnoughValues";
> KeyRef keyref = (KeyRef) fIdentityConstraint;
> String ename = fIdentityConstraint.getElementName();
> - String kname = (keyref.getKey()).getIdentityConstraintName();
> - reportSchemaError(code, new Object[] { ename, kname });
> + String cName = (keyref.getKey()).getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { ename, cName });
> break;
> }
> }
> @@ -3484,13 +3486,16 @@
> }
> // do we even know this field?
> if (i == -1) {
> - String code = "UnknownField";
> - reportSchemaError(code, new Object[] { field.toString()});
> + String code = "UnknownField";
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + String eName = fIdentityConstraint.getElementName();
> + reportSchemaError(code, new Object[] { field.toString(), cName, eName});
> return;
> }
> if (Boolean.TRUE != mayMatch(field)) {
> String code = "FieldMultipleMatch";
> - reportSchemaError(code, new Object[] { field.toString()});
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { field.toString(), cName});
> } else {
> fValuesCount++;
> }
> @@ -3772,7 +3777,8 @@
> String code = "DuplicateUnique";
> String value = toString(fLocalValues);
> String ename = fIdentityConstraint.getElementName();
> - reportSchemaError(code, new Object[] { value, ename });
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { value, ename, cName });
> }
> } // duplicateValue(Hashtable)
>
> @@ -3808,7 +3814,8 @@
> String code = "DuplicateKey";
> String value = toString(fLocalValues);
> String ename = fIdentityConstraint.getElementName();
> - reportSchemaError(code, new Object[] { value, ename });
> + String cName = fIdentityConstraint.getIdentityConstraintName();
> + reportSchemaError(code, new Object[] { value, ename, cName });
> }
> } // duplicateValue(Hashtable)
>
> Index: src/org/apache/xerces/impl/xs/identity/Field.java
> ===================================================================
> RCS file: /home/cvspublic/xml-xerces/java/src/org/apache/xerces/impl/xs/identity/Field.java,v
> retrieving revision 1.20
> diff -u -r1.20 Field.java
> --- src/org/apache/xerces/impl/xs/identity/Field.java 25 May 2005 02:28:39 -0000 1.20
> +++ src/org/apache/xerces/impl/xs/identity/Field.java 4 Aug 2005 11:38:18 -0000
> @@ -173,7 +173,8 @@
> super.matched(actualValue, valueType, itemValueType, isNil);
> if(isNil && (fIdentityConstraint.getCategory() == IdentityConstraint.IC_KEY)) {
> String code = "KeyMatchesNillable";
> - fStore.reportError(code, new Object[]{fIdentityConstraint.getElementName()});
> + fStore.reportError(code,
> + new Object[]{fIdentityConstraint.getElementName(), fIdentityConstraint.getIdentityConstraintName()});
> }
> fStore.addValue(Field.this, actualValue, convertToPrimitiveKind(valueType), convertToPrimitiveKind(itemValueType));
> // once we've stored the value for this field, we set the mayMatch
> Thanks,
> George
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org