You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by je...@locus.apache.org on 2000/09/12 05:45:41 UTC

cvs commit: xml-xerces/java/src/org/apache/xerces/validators/common XMLValidator.java

jeffreyr    00/09/11 20:45:41

  Modified:    java/src/org/apache/xerces/validators/common
                        XMLValidator.java
  Log:
  Bug reported by Mikael Staldal.
  Failed to validate the following:
  
  <?xml version="1.0"?>
  
  <!DOCTYPE root [
  <!ELEMENT root (idEl|idrefEl)*>
  <!ELEMENT idEl EMPTY>
  <!ATTLIST idEl
  	id ID #REQUIRED>
  <!ELEMENT idrefEl EMPTY>
  <!ATTLIST idrefEl
  	ref IDREF #REQUIRED>
  ]>
  
  <root>
  <idrefEl ref="abc"/>
  <idEl id="abc"/>
  </root>
  
  Revision  Changes    Path
  1.78      +36 -46    xml-xerces/java/src/org/apache/xerces/validators/common/XMLValidator.java
  
  Index: XMLValidator.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/validators/common/XMLValidator.java,v
  retrieving revision 1.77
  retrieving revision 1.78
  diff -u -r1.77 -r1.78
  --- XMLValidator.java	2000/08/31 00:41:57	1.77
  +++ XMLValidator.java	2000/09/12 03:45:40	1.78
  @@ -111,7 +111,7 @@
   /**
    * This class is the super all-in-one validator used by the parser.
    *
  - * @version $Id: XMLValidator.java,v 1.77 2000/08/31 00:41:57 jeffreyr Exp $
  + * @version $Id: XMLValidator.java,v 1.78 2000/09/12 03:45:40 jeffreyr Exp $
    */
   public final class XMLValidator
   implements DefaultEntityHandler.EventHandler,
  @@ -363,16 +363,15 @@
       private DatatypeValidatorFactoryImpl fDataTypeReg = 
       DatatypeValidatorFactoryImpl.getDatatypeRegistry();
   
  -    private DatatypeValidator     fValID   = this.fDataTypeReg.getDatatypeValidator("ID" );
  -    private DatatypeValidator fValIDRef    = this.fDataTypeReg.getDatatypeValidator("IDREF" );
  -    private DatatypeValidator fValIDRefs   = this.fDataTypeReg.getDatatypeValidator("IDREFS" );
  -    private DatatypeValidator fValENTITY   = this.fDataTypeReg.getDatatypeValidator("ENTITY" );
  -    private DatatypeValidator fValENTITIES = this.fDataTypeReg.getDatatypeValidator("ENTITIES" );
  -    private DatatypeValidator fValNMTOKEN  = this.fDataTypeReg.getDatatypeValidator("NMTOKEN");
  -    private DatatypeValidator fValNMTOKENS = this.fDataTypeReg.getDatatypeValidator("NMTOKENS");
  -    private DatatypeValidator fValNOTATION = this.fDataTypeReg.getDatatypeValidator("NOTATION" );
  +    private DatatypeValidator     fValID    = this.fDataTypeReg.getDatatypeValidator("ID" );
  +    private DatatypeValidator fValIDRef     = this.fDataTypeReg.getDatatypeValidator("IDREF" );
  +    private DatatypeValidator fValIDRefs    = this.fDataTypeReg.getDatatypeValidator("IDREFS" );
  +    private DatatypeValidator fValENTITY    = this.fDataTypeReg.getDatatypeValidator("ENTITY" );
  +    private DatatypeValidator fValENTITIES  = this.fDataTypeReg.getDatatypeValidator("ENTITIES" );
  +    private DatatypeValidator fValNMTOKEN   = this.fDataTypeReg.getDatatypeValidator("NMTOKEN");
  +    private DatatypeValidator fValNMTOKENS  = this.fDataTypeReg.getDatatypeValidator("NMTOKENS");
  +    private DatatypeValidator fValNOTATION  = this.fDataTypeReg.getDatatypeValidator("NOTATION" );
   
  -
       //
       // Constructors
       //
  @@ -1028,14 +1027,13 @@
                       reportRecoverableXMLError( ex.getMajorCode(), ex.getMinorCode(), 
                                                  ex.getMessage() ); 
   
  -
                   }
               }
  -            
  +
               try {//Reset datatypes state
  -               this.fValID.validate( null, this.fResetID );
  -               this.fValIDRef.validate(null, this.fResetIDRef );
  -               this.fValIDRefs.validate(null, this.fResetIDRef );
  +                this.fValID.validate( null, this.fResetID );
  +                this.fValIDRef.validate(null, this.fResetIDRef );
  +                this.fValIDRefs.validate(null, this.fResetIDRef );
               } catch ( InvalidDatatypeValueException ex ) {
                   System.err.println("Error re-Initializing: ID,IDRef,IDRefs pools" );
               }
  @@ -1635,6 +1633,9 @@
                                                          XMLErrorReporter.ERRORTYPE_RECOVERABLE_ERROR);
                           }
                       if (attType == fIDREFSymbol) {
  +                        //System.out.println("On the FIDREFSymbol 1639" );
  +                        //System.out.println( "stf = " + this.fStoreIDRef.getDatatypeObject() );
  +
                           this.fValIDRef.validate( fStringPool.toString(attValue), this.fStoreIDRef );
                       } else if (attType == fIDREFSSymbol) {
                           this.fValIDRefs.validate( fStringPool.toString(attValue), this.fStoreIDRef );
  @@ -2392,7 +2393,7 @@
       /** Validates element and attributes. */
       private void validateElementAndAttributes(QName element, 
                                                 XMLAttrList attrList) 
  -        throws Exception {
  +    throws Exception {
   
           if ((fElementDepth >= 0 && fValidationFlagStack[fElementDepth] != 0 )|| 
               (fGrammar == null && !fValidating && !fNamespacesEnabled) ) {
  @@ -2938,7 +2939,7 @@
                   String  unTrimValue      = fStringPool.toString(attValue);
                   String  value            = unTrimValue.trim();
                   //System.out.println("value = " + value );
  -                                                               //changes fTempAttDef
  +                //changes fTempAttDef
                   if (fValidationEnabled) {
                       if (value != unTrimValue) {
                           if (invalidStandaloneAttDef(element, attributeDecl.name)) {
  @@ -2991,10 +2992,8 @@
                       }
                   }
                   try {
  -                    //this.fIdDefs = (Hashtable) fValID.validate( value, null );
  -                    //System.out.println("this.fIdDefs = " + this.fIdDefs );
  -
                       this.fStoreIDRef.setDatatypeObject( fValID.validate( value, null ) );
  +                    fValIDRef.validate( value, this.fStoreIDRef ); //just in case we called id after IDREF
                   } catch ( InvalidDatatypeValueException ex ) {
                       reportRecoverableXMLError(ex.getMajorCode(),
                                                 ex.getMinorCode(),
  @@ -3037,33 +3036,24 @@
               break;
           case XMLAttributeDecl.TYPE_NOTATION:
               {
  -                /* WIP
                   String  unTrimValue = fStringPool.toString(attValue);
  -             String  value       = unTrimValue.trim();
  -             if (fValidationEnabled) {
  -                 if (value != unTrimValue) {
  -                     if (invalidStandaloneAttDef(element, attributeDecl.name)) {
  -                         reportRecoverableXMLError(XMLMessages.MSG_ATTVALUE_CHANGED_DURING_NORMALIZATION_WHEN_STANDALONE,
  -                                                   XMLMessages.VC_STANDALONE_DOCUMENT_DECLARATION,
  -                                                   fStringPool.toString(attributeDecl.name.rawname), unTrimValue, value);
  -                     }
  -                 }
  -             }
  -             try {
  -                 //this.fIdDefs = (Hashtable) fValID.validate( value, null );
  -                 //System.out.println("this.fIdDefs = " + this.fIdDefs );
  -
  -                 this.fStoreIDRef.setDatatypeObject( fValID.validate( value, null ) );
  -             } catch ( InvalidDatatypeValueException ex ) {
  -                 reportRecoverableXMLError(ex.getMajorCode(),
  -                                           ex.getMinorCode(),
  -                                           fStringPool.toString( attributeDecl.name.rawname), value );
  -             }
  -          }
  -            */
  -            av = fAttValidatorNOTATION;
  -
  -
  +                String  value       = unTrimValue.trim();
  +                if (fValidationEnabled) {
  +                    if (value != unTrimValue) {
  +                        if (invalidStandaloneAttDef(element, attributeDecl.name)) {
  +                            reportRecoverableXMLError(XMLMessages.MSG_ATTVALUE_CHANGED_DURING_NORMALIZATION_WHEN_STANDALONE,
  +                                                      XMLMessages.VC_STANDALONE_DOCUMENT_DECLARATION,
  +                                                      fStringPool.toString(attributeDecl.name.rawname), unTrimValue, value);
  +                        }
  +                    }
  +                }
  +                try {
  +                    fValNOTATION.validate( value, null );
  +                } catch ( InvalidDatatypeValueException ex ) {
  +                    reportRecoverableXMLError(XMLMessages.MSG_NMTOKEN_INVALID,
  +                                              XMLMessages.VC_NAME_TOKEN,
  +                                              fStringPool.toString(attributeDecl.name.rawname), value);//TODO NMTOKENS messge
  +                }
               }
               break;
           case XMLAttributeDecl.TYPE_NMTOKEN: