You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by gn...@apache.org on 2013/04/24 09:56:36 UTC

svn commit: r1471280 - in /aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/container: BlueprintContainerImpl.java SimpleNamespaceHandlerSet.java

Author: gnodet
Date: Wed Apr 24 07:56:35 2013
New Revision: 1471280

URL: http://svn.apache.org/r1471280
Log:
[ARIES-1055] Allow use of custom namespaces in blueprint-noosgi

Modified:
    aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java
    aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/container/SimpleNamespaceHandlerSet.java

Modified: aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java?rev=1471280&r1=1471279&r2=1471280&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java (original)
+++ aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java Wed Apr 24 07:56:35 2013
@@ -24,6 +24,7 @@ import org.apache.aries.blueprint.Proces
 import org.apache.aries.blueprint.di.Recipe;
 import org.apache.aries.blueprint.di.Repository;
 import org.apache.aries.blueprint.parser.ComponentDefinitionRegistryImpl;
+import org.apache.aries.blueprint.parser.NamespaceHandlerSet;
 import org.apache.aries.blueprint.parser.Parser;
 import org.apache.aries.blueprint.reflect.MetadataUtil;
 import org.apache.aries.blueprint.reflect.PassThroughMetadataImpl;
@@ -81,14 +82,9 @@ public class BlueprintContainerImpl impl
         return System.getProperty(key);
     }
 
-    public void init() throws Exception {
-        // Parse xml resources
-        Parser parser = new Parser();
-        parser.parse(getResources());
-        // Create handler set
-        SimpleNamespaceHandlerSet handlerSet = new SimpleNamespaceHandlerSet();
+    protected NamespaceHandlerSet createNamespaceHandlerSet(Set<URI> namespaces) {
+        NamespaceHandlerSet handlerSet = new SimpleNamespaceHandlerSet();
         // Check namespaces
-        Set<URI> namespaces = parser.getNamespaces();
         Set<URI> unsupported = new LinkedHashSet<URI>();
         for (URI ns : namespaces) {
             if (!handlerSet.getNamespaces().contains(ns)) {
@@ -98,6 +94,17 @@ public class BlueprintContainerImpl impl
         if (unsupported.size() > 0) {
             throw new IllegalArgumentException("Unsupported namespaces: " + unsupported.toString());
         }
+        return handlerSet;
+    }
+
+    public void init() throws Exception {
+        // Parse xml resources
+        Parser parser = new Parser();
+        parser.parse(getResources());
+        // Check namespaces
+        Set<URI> namespaces = parser.getNamespaces();
+        // Create handler set
+        NamespaceHandlerSet handlerSet = createNamespaceHandlerSet(namespaces);
         // Add predefined beans
         componentDefinitionRegistry.registerComponentDefinition(new PassThroughMetadataImpl("blueprintContainer", this));
         // Validate

Modified: aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/container/SimpleNamespaceHandlerSet.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/container/SimpleNamespaceHandlerSet.java?rev=1471280&r1=1471279&r2=1471280&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/container/SimpleNamespaceHandlerSet.java (original)
+++ aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/container/SimpleNamespaceHandlerSet.java Wed Apr 24 07:56:35 2013
@@ -29,23 +29,34 @@ import javax.xml.transform.stream.Stream
 import javax.xml.validation.Schema;
 import javax.xml.validation.SchemaFactory;
 import java.io.IOException;
+import java.io.InputStream;
 import java.net.URI;
+import java.net.URL;
 import java.util.*;
 
 public class SimpleNamespaceHandlerSet implements NamespaceHandlerSet {
 
     public static final URI EXT_1_2_NAMESPACE = URI.create("http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.2.0");
 
-    private Set<URI> namespaces;
+    private Map<URI, URL> namespaces;
+    private Map<URI, NamespaceHandler> handlers;
     private Schema schema;
 
     public SimpleNamespaceHandlerSet() {
-        this.namespaces = new LinkedHashSet<URI>();
-        this.namespaces.add(EXT_1_2_NAMESPACE);
+        this.namespaces = new LinkedHashMap<URI, URL>();
+        this.handlers = new LinkedHashMap<URI, NamespaceHandler>();
+        addNamespace(EXT_1_2_NAMESPACE,
+                getClass().getResource("/org/apache/aries/blueprint/ext/impl/blueprint-ext-1.2.xsd"),
+                new ExtNamespaceHandler());
     }
 
     public Set<URI> getNamespaces() {
-        return Collections.unmodifiableSet(namespaces);
+        return Collections.unmodifiableSet(namespaces.keySet());
+    }
+
+    public void addNamespace(URI namespace, URL schema, NamespaceHandler handler) {
+        namespaces.put(namespace, schema);
+        handlers.put(namespace, handler);
     }
 
     public boolean isComplete() {
@@ -53,19 +64,29 @@ public class SimpleNamespaceHandlerSet i
     }
 
     public NamespaceHandler getNamespaceHandler(URI uri) {
-        if (EXT_1_2_NAMESPACE.equals(uri)) {
-            return new ExtNamespaceHandler();
-        }
-        return null;
+        return handlers.get(uri);
     }
 
     public Schema getSchema() throws SAXException, IOException {
         if (schema == null) {
             final List<StreamSource> schemaSources = new ArrayList<StreamSource>();
-            schemaSources.add(new StreamSource(getClass().getResourceAsStream("/org/apache/aries/blueprint/blueprint.xsd")));
-            schemaSources.add(new StreamSource(getClass().getResourceAsStream("/org/apache/aries/blueprint/ext/impl/blueprint-ext-1.2.xsd")));
-            SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
-            schema = schemaFactory.newSchema(schemaSources.toArray(new Source[schemaSources.size()]));
+            final List<InputStream> streams = new ArrayList<InputStream>();
+            try {
+                InputStream is = getClass().getResourceAsStream("/org/apache/aries/blueprint/blueprint.xsd");
+                streams.add(is);
+                schemaSources.add(new StreamSource(is));
+                for (URI uri : namespaces.keySet()) {
+                    is = namespaces.get(uri).openStream();
+                    streams.add(is);
+                    schemaSources.add(new StreamSource(is));
+                }
+                SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
+                schema = schemaFactory.newSchema(schemaSources.toArray(new Source[schemaSources.size()]));
+            } finally {
+                for (InputStream is : streams) {
+                    is.close();
+                }
+            }
         }
         return schema;
     }