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