sandygao    2002/09/19 11:19:19

  Modified:    java/src/org/apache/xerces/impl/xs XMLSchemaValidator.java
  Log:
  Remove the schema validator from the pipeline when it's not supposed to
  do anything. This happens when
  1. A DTD grammar was found, but no schema grammar was found.
  2. Dynamic validation is on, but no schema grammar was found.
  
  Revision  Changes    Path
  1.102     +23 -5     
xml-xerces/java/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
  
  Index: XMLSchemaValidator.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java,v
  retrieving revision 1.101
  retrieving revision 1.102
  diff -u -r1.101 -r1.102
  --- XMLSchemaValidator.java   18 Sep 2002 21:58:29 -0000      1.101
  +++ XMLSchemaValidator.java   19 Sep 2002 18:19:19 -0000      1.102
  @@ -230,7 +230,6 @@
           SCHEMA_VALIDATION,
           DYNAMIC_VALIDATION,
           SCHEMA_FULL_CHECKING,
  -        SCHEMA_AUGMENT_PSVI
       };
   
       /** Recognized properties. */
  @@ -636,7 +635,11 @@
           // in the case where there is a {value constraint}, and the element
           // doesn't have any text content, change emptyElement call to
           // start + characters + end
  -        modifiedAugs = handleEndElement(element, modifiedAugs);
  +        fDefaultValue = null;
  +        // fElementDepth == -2 indicates that the schema validator was removed
  +        // from the pipeline. then we don't need to call handleEndElement.
  +        if (fElementDepth != -2)
  +            modifiedAugs = handleEndElement(element, modifiedAugs);
   
           // call handlers
           if (fDocumentHandler != null) {
  @@ -718,6 +721,7 @@
   
           // in the case where there is a {value constraint}, and the element
           // doesn't have any text content, add a characters call.
  +        fDefaultValue = null;
           Augmentations modifiedAugs = handleEndElement(element, augs);
           // call handlers
           if (fDocumentHandler != null) {
  @@ -1064,7 +1068,7 @@
       /** Partial validation depth */
       int fPartialValidationDepth;
   
  -    /** Element depth. */
  +    /** Element depth: -2: validator not in pipeline; >= -1 current depth. */
       int fElementDepth;
   
       /** Child count. */
  @@ -1811,6 +1815,21 @@
                   // for dynamic validation, skip the whole content,
                   // because no grammar was found.
                   if (fDynamicValidation) {
  +                    // no schema grammar was found, but it's either dynamic
  +                    // validation, or another kind of grammar was found (DTD,
  +                    // for example). The intended behavior here is to skip
  +                    // the whole document. To improve performance, we try to
  +                    // remove the validator from the pipeline, since it's not
  +                    // supposed to do anything.
  +                    if (fDocumentSource != null) {
  +                        fDocumentSource.setDocumentHandler(fDocumentHandler);
  +                        if (fDocumentHandler != null)
  +                            fDocumentHandler.setDocumentSource(fDocumentSource);
  +                        // indicate that the validator was removed.
  +                        fElementDepth = -2;
  +                        return augs;
  +                    }
  +
                       fSkipValidationDepth = fElementDepth;
                       if (fAugPSVI)
                           augs = getEmptyAugs(augs);
  @@ -2002,7 +2021,6 @@
                   XSConstraints.fullSchemaChecking(fGrammarBucket, fSubGroupHandler, 
fCMBuilder, fXSIErrorReporter.fErrorReporter);
               }
   
  -            fDefaultValue = null;
               if (fAugPSVI)
                   augs = getEmptyAugs(augs);
               return augs;
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to