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