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 "Michael Glavassevich (JIRA)" <xe...@xml.apache.org> on 2006/02/27 06:13:56 UTC

[jira] Updated: (XERCESJ-1092) Better error reporting for identity constraint errors

     [ 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