You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by dk...@apache.org on 2012/05/14 17:16:05 UTC

svn commit: r1338249 - in /aries/branches/blueprint-0.3.2-fixes/blueprint-core: ./ src/main/java/org/apache/aries/blueprint/namespace/NamespaceHandlerRegistryImpl.java

Author: dkulp
Date: Mon May 14 15:16:04 2012
New Revision: 1338249

URL: http://svn.apache.org/viewvc?rev=1338249&view=rev
Log:
[ARIES-626] Part 3 - Go back to handler registry to get schemas

Modified:
    aries/branches/blueprint-0.3.2-fixes/blueprint-core/   (props changed)
    aries/branches/blueprint-0.3.2-fixes/blueprint-core/src/main/java/org/apache/aries/blueprint/namespace/NamespaceHandlerRegistryImpl.java

Propchange: aries/branches/blueprint-0.3.2-fixes/blueprint-core/
------------------------------------------------------------------------------
    svn:mergeinfo = /aries/trunk/blueprint/blueprint-core:1200572,1203335

Modified: aries/branches/blueprint-0.3.2-fixes/blueprint-core/src/main/java/org/apache/aries/blueprint/namespace/NamespaceHandlerRegistryImpl.java
URL: http://svn.apache.org/viewvc/aries/branches/blueprint-0.3.2-fixes/blueprint-core/src/main/java/org/apache/aries/blueprint/namespace/NamespaceHandlerRegistryImpl.java?rev=1338249&r1=1338248&r2=1338249&view=diff
==============================================================================
--- aries/branches/blueprint-0.3.2-fixes/blueprint-core/src/main/java/org/apache/aries/blueprint/namespace/NamespaceHandlerRegistryImpl.java (original)
+++ aries/branches/blueprint-0.3.2-fixes/blueprint-core/src/main/java/org/apache/aries/blueprint/namespace/NamespaceHandlerRegistryImpl.java Mon May 14 15:16:04 2012
@@ -36,6 +36,8 @@ import java.util.Map;
 import java.util.Set;
 import java.util.HashSet;
 import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
 
 import javax.xml.validation.Schema;
 import javax.xml.validation.SchemaFactory;
@@ -43,6 +45,9 @@ import javax.xml.transform.stream.Stream
 import javax.xml.transform.Source;
 import javax.xml.XMLConstants;
 
+import org.w3c.dom.ls.LSInput;
+import org.w3c.dom.ls.LSResourceResolver;
+
 import org.apache.aries.blueprint.NamespaceHandler;
 import org.apache.aries.blueprint.container.NamespaceHandlerRegistry;
 import org.osgi.framework.Bundle;
@@ -52,7 +57,9 @@ import org.osgi.util.tracker.ServiceTrac
 import org.osgi.util.tracker.ServiceTrackerCustomizer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
 
 /**
  * Default implementation of the NamespaceHandlerRegistry.
@@ -227,7 +234,7 @@ public class NamespaceHandlerRegistryImp
             }
         }
         if (schema == null) {
-            List<StreamSource> schemaSources = new ArrayList<StreamSource>();
+            final List<StreamSource> schemaSources = new ArrayList<StreamSource>();
             try {
                 schemaSources.add(new StreamSource(getClass().getResourceAsStream("/org/apache/aries/blueprint/blueprint.xsd")));
                 // Create a schema for all namespaces known at this point
@@ -240,7 +247,77 @@ public class NamespaceHandlerRegistryImp
                         schemaSources.add(new StreamSource(url.openStream(), url.toExternalForm()));
                     }
                 }
-                schema = getSchemaFactory().newSchema(schemaSources.toArray(new Source[schemaSources.size()]));
+                SchemaFactory factory = getSchemaFactory();
+                factory.setResourceResolver(new LSResourceResolver() {
+                    public LSInput resolveResource(String type, 
+                                                   final String namespaceURI, 
+                                                   final String publicId,
+                                                   String systemId, String baseURI) {
+                        
+                        URI uri = URI.create((String) namespaceURI);
+                        Set<NamespaceHandler> hs = NamespaceHandlerRegistryImpl.this.handlers.get(uri);
+                        if (hs == null) {
+                            return null;
+                        }
+                        for (NamespaceHandler h : hs) {
+                            final URL url = h.getSchemaLocation(namespaceURI);
+                            if (url != null) {
+                                try {
+                                    final StreamSource source 
+                                        = new StreamSource(url.openStream(), url.toExternalForm());
+                                    schemaSources.add(source);
+                                    return new LSInput() {
+                                        public Reader getCharacterStream() {
+                                            return null;
+                                        }
+                                        public void setCharacterStream(Reader characterStream) {
+                                        }
+                                        public InputStream getByteStream() {
+                                            return source.getInputStream();
+                                        }
+                                        public void setByteStream(InputStream byteStream) {
+                                        }
+                                        public String getStringData() {
+                                            return null;
+                                        }
+                                        public void setStringData(String stringData) {
+                                        }
+                                        public String getSystemId() {
+                                            return url.toExternalForm();
+                                        }
+                                        public void setSystemId(String systemId) {
+                                        }
+                                        public String getPublicId() {
+                                            return publicId;
+                                        }
+                                        public void setPublicId(String publicId) {
+                                        }
+                                        public String getBaseURI() {
+                                            return null;
+                                        }
+                                        public void setBaseURI(String baseURI) {
+                                        }
+                                        public String getEncoding() {
+                                            return null;
+                                        }
+                                        public void setEncoding(String encoding) {
+                                        }
+                                        public boolean getCertifiedText() {
+                                            return false;
+                                        }
+                                        public void setCertifiedText(boolean certifiedText) {
+                                        }
+                                    };
+                                } catch (IOException e) {
+                                    throw new RuntimeException(e);
+                                }
+                            }
+                        }
+                        return null;
+                    }
+                    
+                });
+                schema = factory.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();
@@ -284,7 +361,6 @@ public class NamespaceHandlerRegistryImp
     }
 
     private SchemaFactory getSchemaFactory() {
-        SchemaFactory schemaFactory = null;
         if (schemaFactory == null) {
             schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
         }