You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by sa...@apache.org on 2002/03/01 01:41:27 UTC

cvs commit: xml-xerces/java/src/org/apache/xerces/impl/xs/traversers XSDHandler.java

sandygao    02/02/28 16:41:27

  Modified:    java/src/org/apache/xerces/impl/xs/traversers
                        XSDHandler.java
  Log:
  Fixing bug [6766]: we didn't reset the schema handler (traversers) between parsing schema documents.
  
  Revision  Changes    Path
  1.30      +56 -45    xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDHandler.java
  
  Index: XSDHandler.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDHandler.java,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- XSDHandler.java	27 Feb 2002 17:47:35 -0000	1.29
  +++ XSDHandler.java	1 Mar 2002 00:41:27 -0000	1.30
  @@ -117,7 +117,7 @@
    *
    * @author Neil Graham, IBM
    * @author Pavani Mukthipudi, Sun Microsystems
  - * @version $Id: XSDHandler.java,v 1.29 2002/02/27 17:47:35 neeraj Exp $
  + * @version $Id: XSDHandler.java,v 1.30 2002/03/01 00:41:27 sandygao Exp $
    */
   public class XSDHandler {
   
  @@ -325,12 +325,12 @@
       // the incremental size of the array to store deferred local elements
       private static final int INC_STACK_SIZE  = 10;
       // current position of the array (# of deferred local elements)
  -    private int fLocalElemStackPos;
  +    private int fLocalElemStackPos = 0;
   
  -    private XSParticleDecl[] fParticle;
  -    private Element[] fLocalElementDecl;
  -    private int[] fAllContext;
  -    private String [][] fLocalElemNamespaceContext;
  +    private XSParticleDecl[] fParticle = new XSParticleDecl[INIT_STACK_SIZE];
  +    private Element[] fLocalElementDecl = new Element[INIT_STACK_SIZE];
  +    private int[] fAllContext = new int[INIT_STACK_SIZE];
  +    private String [][] fLocalElemNamespaceContext = new String [INIT_STACK_SIZE][1];
   
       // these data members are needed for the deferred traversal
       // of keyrefs.
  @@ -340,11 +340,11 @@
       // the incremental size of the array to store deferred keyrefs
       private static final int INC_KEYREF_STACK_AMOUNT = 2;
       // current position of the array (# of deferred keyrefs)
  -    private int fKeyrefStackPos;
  +    private int fKeyrefStackPos = 0;
   
  -    private Element [] fKeyrefs;
  -    private XSElementDecl [] fKeyrefElems;
  -    private String [][] fKeyrefNamespaceContext;
  +    private Element [] fKeyrefs = new Element[INIT_KEYREF_STACK];
  +    private XSElementDecl [] fKeyrefElems = new XSElementDecl [INIT_KEYREF_STACK];
  +    private String [][] fKeyrefNamespaceContext = new String[INIT_KEYREF_STACK][1];
   
       // Constructors
   
  @@ -383,6 +383,10 @@
   
       public SchemaGrammar parseSchema(String schemaNamespace,
                                        XMLInputSource is, short referType) {
  +                                     
  +        // before parsing a schema, need to reset all traversers and
  +        // clear all registries
  +        prepare();
           
           // first phase:  construct trees.
           Document schemaRoot = getSchema(schemaNamespace, is,
  @@ -424,7 +428,7 @@
       // may wish to have setter methods for ErrorHandler,
       // EntityResolver...
   
  -    private static String[][] NS_ERROR_CODES = {
  +    private static final String[][] NS_ERROR_CODES = {
           {"src-include.2.1", "src-include.2.1"},
           {"src-redefine.3.1", "src-redefine.3.1"},
           {"src-import.3.1", "src-import.3.2"},
  @@ -435,7 +439,7 @@
           {"TargetNamespace.1", "TargetNamespace.2"}
       };
       
  -    private static String[] ELE_ERROR_CODES = {
  +    private static final String[] ELE_ERROR_CODES = {
           "src-include.1", "src-redefine.2", "src-import.2", "schema_reference.4",
           "schema_reference.4", "schema_reference.4", "schema_reference.4", "schema_reference.4"
       };
  @@ -1201,7 +1205,7 @@
           fKeyrefNamespaceContext[fKeyrefStackPos++] = schemaDoc.fNamespaceSupport.getEffectiveLocalContext();
       } // storeKeyref (Element, XSDocumentInfo, XSElementDecl): void
   
  -    private static String[] DOC_ERROR_CODES = {
  +    private static final String[] DOC_ERROR_CODES = {
           "src-include.0", "src-redefine.0", "src-import.0", "schema_reference.4",
           "schema_reference.4", "schema_reference.4", "schema_reference.4", "schema_reference.4"
       };
  @@ -1319,30 +1323,9 @@
           fWildCardTraverser = new XSDWildcardTraverser(this, fAttributeChecker);
       } // createTraversers()
   
  -    // this method clears all the global structs of this object
  -    // (except those passed in via the constructor).
  -    public void reset(XMLErrorReporter errorReporter,
  -                      XMLEntityResolver entityResolver,
  -                      SymbolTable symbolTable,
  -                      String externalSchemaLocation,
  -                      String externalNoNSSchemaLocation,
  -                      Object jaxpSchemaSource, XMLGrammarPool grammarPool) {
  -
  -        fErrorReporter = errorReporter;
  -        fSymbolTable = symbolTable;
  -        fGrammarPool = grammarPool;
  -        fSchemaGrammarDescription.reset();
  -
  -        EMPTY_STRING = fSymbolTable.addSymbol(SchemaSymbols.EMPTY_STRING);
  -
  -        fLocationResolver.reset(entityResolver, externalSchemaLocation, externalNoNSSchemaLocation);
  -
  -        try {
  -            fSchemaParser.setProperty(ERROR_HANDLER, fErrorReporter.getErrorHandler());
  -        }
  -        catch (Exception e) {
  -        }
  -
  +    // before parsing a schema, need to reset all traversers and
  +    // clear all registries
  +    void prepare() {
           fUnparsedAttributeRegistry.clear();
           fUnparsedAttributeGroupRegistry.clear();
           fUnparsedElementRegistry.clear();
  @@ -1361,18 +1344,21 @@
           fRoot = null;
           fLastSchemaWasDuplicate = false;
   
  +        // clear local element stack
  +        for (int i = 0; i < fLocalElemStackPos; i++) {
  +            fParticle[i] = null;
  +            fLocalElementDecl[i] = null;
  +            fLocalElemNamespaceContext[i] = null;
  +        }
           fLocalElemStackPos = 0;
  -        fParticle = new XSParticleDecl[INIT_STACK_SIZE];
  -        fLocalElementDecl = new Element[INIT_STACK_SIZE];
  -        fAllContext = new int[INIT_STACK_SIZE];
  -        // err on the small side for num. of local namespaces declared...
  -        fLocalElemNamespaceContext = new String [INIT_STACK_SIZE][1];
   
           // and do same for keyrefs.
  +        for (int i = 0; i < fKeyrefStackPos; i++) {
  +            fKeyrefs[i] = null;
  +            fKeyrefElems[i] = null;
  +            fKeyrefNamespaceContext[i] = null;
  +        }
           fKeyrefStackPos = 0;
  -        fKeyrefs = new Element[INIT_KEYREF_STACK];
  -        fKeyrefElems = new XSElementDecl [INIT_KEYREF_STACK];
  -        fKeyrefNamespaceContext = new String[INIT_KEYREF_STACK][1];
   
           // reset traversers
           fAttributeChecker.reset(fSymbolTable);
  @@ -1389,6 +1375,31 @@
   
           fRedefinedRestrictedAttributeGroupRegistry.clear();
           fRedefinedRestrictedGroupRegistry.clear();
  +    }
  +    
  +    // this method reset properties that might change between parses.
  +    // and process the jaxp schemaSource property
  +    public void reset(XMLErrorReporter errorReporter,
  +                      XMLEntityResolver entityResolver,
  +                      SymbolTable symbolTable,
  +                      String externalSchemaLocation,
  +                      String externalNoNSSchemaLocation,
  +                      Object jaxpSchemaSource, XMLGrammarPool grammarPool) {
  +
  +        fErrorReporter = errorReporter;
  +        fSymbolTable = symbolTable;
  +        fGrammarPool = grammarPool;
  +        fSchemaGrammarDescription.reset();
  +
  +        EMPTY_STRING = fSymbolTable.addSymbol(SchemaSymbols.EMPTY_STRING);
  +
  +        fLocationResolver.reset(entityResolver, externalSchemaLocation, externalNoNSSchemaLocation);
  +
  +        try {
  +            fSchemaParser.setProperty(ERROR_HANDLER, fErrorReporter.getErrorHandler());
  +        }
  +        catch (Exception e) {
  +        }
   
           processJAXPSchemaSource(jaxpSchemaSource, entityResolver);
       } // reset(ErrorReporter, EntityResolver, SymbolTable)
  
  
  

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