Author: sandygao
Date: Tue Sep  1 21:02:53 2009
New Revision: 810237

URL: http://svn.apache.org/viewvc?rev=810237&view=rev
Log:
During schema loading, the declaration pool was designed to reuse objects for 
schema components. Seems it's now used more often than it should be. We should 
only reuse these objects when they are not exposed or cached. ... Also when 
reusing simple type objects, we need to clear the "anonymous" bit.

Modified:
    xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/XSSimpleTypeDecl.java
    xerces/java/trunk/src/org/apache/xerces/impl/xs/XMLSchemaLoader.java

Modified: 
xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/XSSimpleTypeDecl.java
URL: 
http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/XSSimpleTypeDecl.java?rev=810237&r1=810236&r2=810237&view=diff
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/XSSimpleTypeDecl.java 
(original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/XSSimpleTypeDecl.java 
Tue Sep  1 21:02:53 2009
@@ -475,6 +475,7 @@
         //decline to do anything if the object is immutable.
         if(fIsImmutable) return null;
         fBase = base;
+        fAnonymous = false;
         fTypeName = name;
         fTargetNamespace = uri;
         fFinalSet = finalSet;
@@ -529,6 +530,7 @@
         //decline to do anything if the object is immutable.
         if(fIsImmutable) return null;
         fBase = fAnySimpleType;
+        fAnonymous = false;
         fTypeName = name;
         fTargetNamespace = uri;
         fFinalSet = finalSet;
@@ -556,6 +558,7 @@
         //decline to do anything if the object is immutable.
         if(fIsImmutable) return null;
         fBase = fAnySimpleType;
+        fAnonymous = false;
         fTypeName = name;
         fTargetNamespace = uri;
         fFinalSet = finalSet;

Modified: xerces/java/trunk/src/org/apache/xerces/impl/xs/XMLSchemaLoader.java
URL: 
http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/xs/XMLSchemaLoader.java?rev=810237&r1=810236&r2=810237&view=diff
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/xs/XMLSchemaLoader.java 
(original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/xs/XMLSchemaLoader.java Tue 
Sep  1 21:02:53 2009
@@ -338,7 +338,6 @@
         }
         fCMBuilder = builder;
         fSchemaHandler = new XSDHandler(fGrammarBucket);
-        fDeclPool = new XSDeclarationPool();
         fJAXPCache = new WeakHashMap();
         
         fSettingsChanged = true;
@@ -965,6 +964,9 @@
             fJAXPProcessed = false;
             // reinitialize grammar bucket
             initGrammarBucket();
+            if (fDeclPool != null) {
+                fDeclPool.reset();
+            }
             return;           
         } 
         
@@ -976,13 +978,6 @@
         // get the error reporter
         fErrorReporter = 
(XMLErrorReporter)componentManager.getProperty(ERROR_REPORTER);
         
-        boolean psvi = true;
-        try {
-            psvi = componentManager.getFeature(AUGMENT_PSVI);
-        } catch (XMLConfigurationException e) {
-            psvi = false;
-        }
-        
         // Determine schema dv factory to use
         SchemaDVFactory dvFactory = null;
         try {
@@ -994,19 +989,6 @@
         }
         fSchemaHandler.setDVFactory(dvFactory);
 
-        if (!psvi) {
-            fDeclPool.reset();
-            fCMBuilder.setDeclPool(fDeclPool);
-            fSchemaHandler.setDeclPool(fDeclPool);
-            if (dvFactory instanceof SchemaDVFactoryImpl) {
-                fDeclPool.setDVFactory((SchemaDVFactoryImpl)dvFactory);
-                ((SchemaDVFactoryImpl)dvFactory).setDeclPool(fDeclPool);
-            }
-        } else {
-            fCMBuilder.setDeclPool(null);
-            fSchemaHandler.setDeclPool(null);
-        }
-        
         // get schema location properties
         try {
             fExternalSchemas = (String) 
componentManager.getProperty(SCHEMA_LOCATION);
@@ -1033,6 +1015,37 @@
             fGrammarPool = null;
         }
         initGrammarBucket();
+
+        boolean psvi = true;
+        try {
+            psvi = componentManager.getFeature(AUGMENT_PSVI);
+        } catch (XMLConfigurationException e) {
+            psvi = false;
+        }
+        
+        // Only use the decl pool when there is no chance that the schema
+        // components will be exposed or cached.
+        if (!psvi && fGrammarPool == null) {
+            if (fDeclPool != null) {
+                fDeclPool.reset();
+            }
+            else {
+                fDeclPool = new XSDeclarationPool();
+            }
+            fCMBuilder.setDeclPool(fDeclPool);
+            fSchemaHandler.setDeclPool(fDeclPool);
+            if (dvFactory instanceof SchemaDVFactoryImpl) {
+                fDeclPool.setDVFactory((SchemaDVFactoryImpl)dvFactory);
+                ((SchemaDVFactoryImpl)dvFactory).setDeclPool(fDeclPool);
+            }
+        } else {
+            fCMBuilder.setDeclPool(null);
+            fSchemaHandler.setDeclPool(null);
+            if (dvFactory instanceof SchemaDVFactoryImpl) {
+                ((SchemaDVFactoryImpl)dvFactory).setDeclPool(null);
+            }
+        }
+        
         // get continue-after-fatal-error feature
         try {
             boolean fatalError = 
componentManager.getFeature(CONTINUE_AFTER_FATAL_ERROR);



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to