You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by ne...@apache.org on 2002/03/12 22:32:48 UTC

cvs commit: xml-xerces/java/src/org/apache/xerces/impl XMLEntityManager.java XMLDocumentFragmentScannerImpl.java XMLDocumentScannerImpl.java XMLDTDScannerImpl.java

neilg       02/03/12 13:32:48

  Modified:    java/src/org/apache/xerces/impl XMLEntityManager.java
                        XMLDocumentFragmentScannerImpl.java
                        XMLDocumentScannerImpl.java XMLDTDScannerImpl.java
  Log:
  Fix for some performance problems relating to the way in which encodings are detected.  Two parts to the fix:
  1.  We now read only a small number (64 bytes) one at a time at the beginning of external entities in order to correctly process their encoding declarations.  Formerly, in certain cases we would end up reading at least 2K bytes one at a time, particularly when using default Java Reader classes.
  2.  Previously, there were cases in which we did not turn off this one-byte-at-a-time behaviour.  Now it is turned off for all kinds of external entity once the encoding is finally determined.
  
  Revision  Changes    Path
  1.26      +9 -4      xml-xerces/java/src/org/apache/xerces/impl/XMLEntityManager.java
  
  Index: XMLEntityManager.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/XMLEntityManager.java,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- XMLEntityManager.java	31 Jan 2002 15:17:56 -0000	1.25
  +++ XMLEntityManager.java	12 Mar 2002 21:32:48 -0000	1.26
  @@ -115,7 +115,7 @@
    * @author Andy Clark, IBM
    * @author Arnaud  Le Hors, IBM
    *
  - * @version $Id: XMLEntityManager.java,v 1.25 2002/01/31 15:17:56 sandygao Exp $
  + * @version $Id: XMLEntityManager.java,v 1.26 2002/03/12 21:32:48 neilg Exp $
    */
   public class XMLEntityManager
       implements XMLComponent, XMLEntityResolver {
  @@ -127,6 +127,9 @@
       /** Default buffer size (2048). */
       public static final int DEFAULT_BUFFER_SIZE = 2048;
   
  +    /** Default buffer size before we've finished with the XMLDecl:  */
  +    public static final int DEFAULT_XMLDECL_BUFFER_SIZE = 64;
  +
       // feature identifiers
   
       /** Feature identifier: validation. */
  @@ -1727,7 +1730,7 @@
           /** Count of characters in buffer. */
           public int count;
   
  -        // to allow the reader/nputStream to behave efficiently:
  +        // to allow the reader/inputStream to behave efficiently:
           public boolean mayReadChunks;
   
           //
  @@ -3181,7 +3184,9 @@
               }
   
               // read characters
  -            int length = fCurrentEntity.ch.length - offset;
  +            int length = fCurrentEntity.mayReadChunks? 
  +                    (fCurrentEntity.ch.length - offset):
  +                    (DEFAULT_XMLDECL_BUFFER_SIZE);
               if (DEBUG_BUFFER) System.out.println("  length to try to read: "+length);
               int count = fCurrentEntity.reader.read(fCurrentEntity.ch, offset, length);
               if (DEBUG_BUFFER) System.out.println("  length actually read:  "+count);
  @@ -3219,7 +3224,7 @@
   
               return entityChanged;
   
  -        } // load(int):boolean
  +        } // load(int, boolean):boolean
   
       } // class EntityScanner
   
  
  
  
  1.11      +3 -1      xml-xerces/java/src/org/apache/xerces/impl/XMLDocumentFragmentScannerImpl.java
  
  Index: XMLDocumentFragmentScannerImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/XMLDocumentFragmentScannerImpl.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- XMLDocumentFragmentScannerImpl.java	29 Jan 2002 03:44:36 -0000	1.10
  +++ XMLDocumentFragmentScannerImpl.java	12 Mar 2002 21:32:48 -0000	1.11
  @@ -108,7 +108,7 @@
    * @author Arnaud  Le Hors, IBM
    * @author Eric Ye, IBM
    *
  - * @version $Id: XMLDocumentFragmentScannerImpl.java,v 1.10 2002/01/29 03:44:36 lehors Exp $
  + * @version $Id: XMLDocumentFragmentScannerImpl.java,v 1.11 2002/03/12 21:32:48 neilg Exp $
    */
   public class XMLDocumentFragmentScannerImpl
       extends XMLScanner
  @@ -1512,6 +1512,8 @@
                                       scanXMLDeclOrTextDecl(true);
                                   }
                               }
  +                            // now that we've straightened out the readers, we can read in chunks:
  +                            fEntityManager.fCurrentEntity.mayReadChunks = true;
                               setScannerState(SCANNER_STATE_CONTENT);
                               break;
                           }
  
  
  
  1.16      +8 -9      xml-xerces/java/src/org/apache/xerces/impl/XMLDocumentScannerImpl.java
  
  Index: XMLDocumentScannerImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/XMLDocumentScannerImpl.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- XMLDocumentScannerImpl.java	28 Jan 2002 19:33:34 -0000	1.15
  +++ XMLDocumentScannerImpl.java	12 Mar 2002 21:32:48 -0000	1.16
  @@ -109,7 +109,7 @@
    * @author Arnaud  Le Hors, IBM
    * @author Eric Ye, IBM
    *
  - * @version $Id: XMLDocumentScannerImpl.java,v 1.15 2002/01/28 19:33:34 lehors Exp $
  + * @version $Id: XMLDocumentScannerImpl.java,v 1.16 2002/03/12 21:32:48 neilg Exp $
    */
   public class XMLDocumentScannerImpl
       extends XMLDocumentFragmentScannerImpl {
  @@ -410,7 +410,7 @@
           // prepare to look for a TextDecl if external general entity
           if (!name.equals("[xml]") && fEntityScanner.isExternal()) {
               setScannerState(SCANNER_STATE_TEXT_DECL);
  -        }
  +        } 
   
           // call handler
           if (fDocumentHandler != null && name.equals("[xml]")) {
  @@ -578,8 +578,11 @@
                       else {
                           scanXMLDeclOrTextDecl(false);
                       }
  -                    return true;
                   }
  +                fEntityManager.fCurrentEntity.mayReadChunks = true;
  +
  +                // if no XMLDecl, then scan piece of prolog
  +                return true;
               }
   
               // premature end of file
  @@ -588,8 +591,6 @@
                   throw e;
               }
   
  -            // if no XMLDecl, then scan piece of prolog
  -            return true;
   
           } // dispatch(boolean):boolean
   
  @@ -628,8 +629,6 @@
                       again = false;
                       switch (fScannerState) {
                           case SCANNER_STATE_PROLOG: {
  -                            // if we're here then we're past the prolog decl!
  -                            fEntityManager.fCurrentEntity.mayReadChunks = true;
                               fEntityScanner.skipSpaces();
                               if (fEntityScanner.skipChar('<')) {
                                   setScannerState(SCANNER_STATE_START_OF_MARKUP);
  @@ -768,7 +767,7 @@
               fEntityManager.setEntityHandler(null);
               try {
                   boolean again;
  -		XMLResourceIdentifierImpl resourceIdentifier = new XMLResourceIdentifierImpl();
  +		        XMLResourceIdentifierImpl resourceIdentifier = new XMLResourceIdentifierImpl();
                   do {
                       again = false;
                       switch (fScannerState) {
  @@ -805,7 +804,7 @@
                               break;
                           }
                           case SCANNER_STATE_DTD_EXTERNAL: {
  -			    resourceIdentifier.setValues(fDoctypePublicId, fDoctypeSystemId, null, null);
  +			                resourceIdentifier.setValues(fDoctypePublicId, fDoctypeSystemId, null, null);
                               XMLInputSource xmlInputSource =
                                   fEntityManager.resolveEntity(resourceIdentifier);
                               fDTDScanner.setInputSource(xmlInputSource);
  
  
  
  1.19      +2 -1      xml-xerces/java/src/org/apache/xerces/impl/XMLDTDScannerImpl.java
  
  Index: XMLDTDScannerImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/XMLDTDScannerImpl.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- XMLDTDScannerImpl.java	29 Jan 2002 20:44:02 -0000	1.18
  +++ XMLDTDScannerImpl.java	12 Mar 2002 21:32:48 -0000	1.19
  @@ -103,7 +103,7 @@
    * @author Glenn Marcy, IBM
    * @author Eric Ye, IBM
    *
  - * @version $Id: XMLDTDScannerImpl.java,v 1.18 2002/01/29 20:44:02 neilg Exp $
  + * @version $Id: XMLDTDScannerImpl.java,v 1.19 2002/03/12 21:32:48 neilg Exp $
    */
   public class XMLDTDScannerImpl
       extends XMLScanner
  @@ -655,6 +655,7 @@
                   }
               }
           }
  +        fEntityManager.fCurrentEntity.mayReadChunks = true;
   
           return textDecl;
       
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org