You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xmlbeans.apache.org by kk...@apache.org on 2004/11/19 01:09:03 UTC

cvs commit: xml-xmlbeans/v2/src/typeimpl/org/apache/xmlbeans/impl/validator Validator.java

kkrouse     2004/11/18 16:09:02

  Modified:    v2/src/xmlpublic/org/apache/xmlbeans message.properties
               v2/src/typeimpl/org/apache/xmlbeans/impl/validator
                        Validator.java
  Log:
  improved validation error message to skip over missing optional elements
  
  Revision  Changes    Path
  1.8       +2 -2      xml-xmlbeans/v2/src/xmlpublic/org/apache/xmlbeans/message.properties
  
  Index: message.properties
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/xmlpublic/org/apache/xmlbeans/message.properties,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- message.properties	30 Oct 2004 21:48:46 -0000	1.7
  +++ message.properties	19 Nov 2004 00:09:02 -0000	1.8
  @@ -69,13 +69,13 @@
   Element ''{0}'' with element-only content type cannot have text content.
   
   cvc-complex-type.2.4a = \
  -Expected element ''{0}'' instead of ''{1}'' here
  +Expected element{0,choice,1<s} ''{1}'' instead of ''{2}'' here
   
   cvc-complex-type.2.4b = \
   Element not allowed: {0}
   
   cvc-complex-type.2.4c = \
  -Expected element ''{0}'' at the end of the content
  +Expected element{0,choice,1<s} ''{1}'' at the end of the content
   
   cvc-complex-type.2.4d = \
   Expected element(s)
  
  
  
  1.23      +40 -26    xml-xmlbeans/v2/src/typeimpl/org/apache/xmlbeans/impl/validator/Validator.java
  
  Index: Validator.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/typeimpl/org/apache/xmlbeans/impl/validator/Validator.java,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- Validator.java	29 Sep 2004 18:06:50 -0000	1.22
  +++ Validator.java	19 Nov 2004 00:09:02 -0000	1.23
  @@ -62,11 +62,13 @@
   import org.apache.xmlbeans.XmlString;
   
   import java.math.BigDecimal;
  +import java.math.BigInteger;
   import java.util.Collection;
   import java.util.HashSet;
   import java.util.LinkedList;
   import java.util.List;
   import java.util.ArrayList;
  +import java.util.Iterator;
   import javax.xml.namespace.QName;
   
   public final class Validator
  @@ -884,28 +886,35 @@
   
       private void findDetailedErrorBegin(Event event, State state, QName qName)
       {
  -        boolean found = false;
  +        ArrayList expectedNames = new ArrayList();
  +
           SchemaProperty[] eltProperties = state._type.getElementProperties();
           for (int ii = 0; ii < eltProperties.length; ii++)
           {
               //Get the element from the schema
               SchemaProperty sProp = eltProperties[ii];
   
  -            // test if the element is valid
  -            if (state.test(sProp.getName()))
  -            {
  -                found = true;
  -                ArrayList expectedNames = new ArrayList();
  +            // test if the element is valid and has min occurs > 0
  +            if (state.test(sProp.getName()) && 1 == sProp.getMinOccurs().compareTo(BigInteger.ZERO))
                   expectedNames.add(sProp.getName());
  +        }
   
  -                emitFieldError( event, XmlErrorCodes.ELEM_COMPLEX_TYPE_LOCALLY_VALID$EXPECTED_DIFFERENT_ELEMENT,
  -                    new Object[] { QNameHelper.pretty(sProp.getName()), QNameHelper.pretty(qName) },
  -                    qName, sProp.getType(), expectedNames, XmlValidationError.INCORRECT_ELEMENT, state._type);
  -
  -                break;
  +        if (expectedNames.size() > 0)
  +        {
  +            StringBuffer buf = new StringBuffer();
  +            for (Iterator iter = expectedNames.iterator(); iter.hasNext();)
  +            {
  +                QName qname = (QName) iter.next();
  +                buf.append(QNameHelper.pretty(qname));
  +                if (iter.hasNext())
  +                    buf.append(" ");
               }
  +
  +            emitFieldError( event, XmlErrorCodes.ELEM_COMPLEX_TYPE_LOCALLY_VALID$EXPECTED_DIFFERENT_ELEMENT,
  +                new Object[] { new Integer(expectedNames.size()), buf.toString(), QNameHelper.pretty(qName) },
  +                qName, null, expectedNames, XmlValidationError.INCORRECT_ELEMENT, state._type);
           }
  -        if (!found)
  +        else
           {
               emitFieldError( event, XmlErrorCodes.ELEM_COMPLEX_TYPE_LOCALLY_VALID$ELEMENT_NOT_ALLOWED,
                   new Object[] { QNameHelper.pretty(qName) },
  @@ -916,30 +925,35 @@
       private void findDetailedErrorEnd(Event event, State state)
       {
           SchemaProperty[] eltProperties  = state._type.getElementProperties();
  -        boolean found = false;
  +
  +        ArrayList expectedNames = new ArrayList();
   
           for (int ii = 0; ii < eltProperties.length; ii++)
           {
               //Get the element from the schema
               SchemaProperty sProp = eltProperties[ii];
   
  -            // test if the element is valid
  -            if (state.test(sProp.getName()))
  -            {
  -                found = true;
  -
  -                ArrayList expectedNames = new ArrayList();
  +            // test if the element is valid and has min occurs > 0
  +            if (state.test(sProp.getName()) && 1 == sProp.getMinOccurs().compareTo(BigInteger.ZERO))
                   expectedNames.add(sProp.getName());
  +        }
   
  -                emitFieldError( event, XmlErrorCodes.ELEM_COMPLEX_TYPE_LOCALLY_VALID$MISSING_ELEMENT,
  -                    new Object[] { QNameHelper.pretty(sProp.getName()) },
  -                    null, sProp.getType(), expectedNames, XmlValidationError.INCORRECT_ELEMENT, state._type);
  -
  -                break;
  +        if (expectedNames.size() > 0)
  +        {
  +            StringBuffer buf = new StringBuffer();
  +            for (Iterator iter = expectedNames.iterator(); iter.hasNext();)
  +            {
  +                QName qname = (QName) iter.next();
  +                buf.append(QNameHelper.pretty(qname));
  +                if (iter.hasNext())
  +                    buf.append(" ");
               }
  -        }
   
  -        if (!found)
  +            emitFieldError( event, XmlErrorCodes.ELEM_COMPLEX_TYPE_LOCALLY_VALID$MISSING_ELEMENT,
  +                new Object[] { new Integer(expectedNames.size()), buf.toString() },
  +                null, null, expectedNames, XmlValidationError.INCORRECT_ELEMENT, state._type);
  +        }
  +        else
           {
               emitFieldError( event, XmlErrorCodes.ELEM_COMPLEX_TYPE_LOCALLY_VALID$EXPECTED_ELEMENT,
                   null, null, null, null, XmlValidationError.ELEMENT_NOT_ALLOWED, state._type);
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xmlbeans.apache.org
For additional commands, e-mail: commits-help@xmlbeans.apache.org