[ 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]

Reply via email to