Author: gnodet
Date: Thu Feb  3 15:13:58 2011
New Revision: 1066828

URL: http://svn.apache.org/viewvc?rev=1066828&view=rev
Log:
[ARIES-563] The NamespaceHandlerRegistryImpl does not actually reuse parsed 
schemas

Modified:
    
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/namespace/NamespaceHandlerRegistryImpl.java

Modified: 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/namespace/NamespaceHandlerRegistryImpl.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/namespace/NamespaceHandlerRegistryImpl.java?rev=1066828&r1=1066827&r2=1066828&view=diff
==============================================================================
--- 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/namespace/NamespaceHandlerRegistryImpl.java
 (original)
+++ 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/namespace/NamespaceHandlerRegistryImpl.java
 Thu Feb  3 15:13:58 2011
@@ -214,7 +214,14 @@ public class NamespaceHandlerRegistryImp
         // If it contains additional namespaces, it should not be a problem 
since
         // they won't be used at all
         for (Map<URI, NamespaceHandler> key : schemas.keySet()) {
-            if (key.equals(handlers)) {
+            boolean found = true;
+            for (URI uri : handlers.keySet()) {
+                if (!handlers.get(uri).equals(key.get(uri))) {
+                    found = false;
+                    break;
+                }
+            }
+            if (found) {
                 schema = schemas.get(key).get();
                 break;
             }
@@ -234,6 +241,22 @@ public class NamespaceHandlerRegistryImp
                     }
                 }
                 schema = 
getSchemaFactory().newSchema(schemaSources.toArray(new 
Source[schemaSources.size()]));
+                // Remove schemas that are fully included
+                for (Iterator<Map<URI, NamespaceHandler>> iterator = 
schemas.keySet().iterator(); iterator.hasNext();) {
+                    Map<URI, NamespaceHandler> key = iterator.next();
+                    boolean found = true;
+                    for (URI uri : key.keySet()) {
+                        if (!key.get(uri).equals(handlers.get(uri))) {
+                            found = false;
+                            break;
+                        }
+                    }
+                    if (found) {
+                        iterator.remove();
+                        break;
+                    }
+                }
+                // Add our new schema
                 schemas.put(handlers, new SoftReference<Schema>(schema));
             } finally {
                 for (StreamSource s : schemaSources) {


Reply via email to