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 2018/02/02 16:29:54 UTC
svn commit: r1822985 - in /aries/trunk/blueprint:
blueprint-parser/src/main/java/org/apache/aries/blueprint/
blueprint-parser/src/main/java/org/apache/aries/blueprint/parser/
blueprint-spring/
blueprint-spring/src/main/java/org/apache/aries/blueprint/s...
Author: gnodet
Date: Fri Feb 2 16:29:54 2018
New Revision: 1822985
URL: http://svn.apache.org/viewvc?rev=1822985&view=rev
Log:
[ARIES-1770] Spring schemas can not be validated offline
Modified:
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/ParserContext.java
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/parser/ParserContextImpl.java
aries/trunk/blueprint/blueprint-spring/pom.xml
aries/trunk/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintNamespaceHandler.java
Modified: aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/ParserContext.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/ParserContext.java?rev=1822985&r1=1822984&r2=1822985&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/ParserContext.java (original)
+++ aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/ParserContext.java Fri Feb 2 16:29:54 2018
@@ -17,6 +17,7 @@
package org.apache.aries.blueprint;
import java.net.URI;
+import java.util.Set;
import org.osgi.service.blueprint.reflect.ComponentMetadata;
import org.osgi.service.blueprint.reflect.Metadata;
@@ -90,6 +91,11 @@ public interface ParserContext {
String getDefaultTimeout();
/**
+ * Retrieve the set of namespaces
+ */
+ Set<URI> getNamespaces();
+
+ /**
* Retrieve the namespace handler for the given uri
*/
NamespaceHandler getNamespaceHandler(URI namespaceUri);
Modified: aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/parser/ParserContextImpl.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/parser/ParserContextImpl.java?rev=1822985&r1=1822984&r2=1822985&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/parser/ParserContextImpl.java (original)
+++ aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/parser/ParserContextImpl.java Fri Feb 2 16:29:54 2018
@@ -19,6 +19,8 @@
package org.apache.aries.blueprint.parser;
import java.net.URI;
+import java.util.Collections;
+import java.util.Set;
import org.apache.aries.blueprint.ComponentDefinitionRegistry;
import org.apache.aries.blueprint.NamespaceHandler;
@@ -93,6 +95,11 @@ public class ParserContextImpl implement
}
@Override
+ public Set<URI> getNamespaces() {
+ return Collections.unmodifiableSet(parser.getNamespaces());
+ }
+
+ @Override
public NamespaceHandler getNamespaceHandler(URI namespaceUri) {
return parser.getNamespaceHandler(namespaceUri);
}
Modified: aries/trunk/blueprint/blueprint-spring/pom.xml
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-spring/pom.xml?rev=1822985&r1=1822984&r2=1822985&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-spring/pom.xml (original)
+++ aries/trunk/blueprint/blueprint-spring/pom.xml Fri Feb 2 16:29:54 2018
@@ -59,8 +59,8 @@
org.apache.aries.blueprint.spring.Activator
</aries.osgi.activator>
<blueprint.api.version>1.0.0</blueprint.api.version>
- <blueprint.core.version>1.6.2</blueprint.core.version>
- <blueprint.parser.version>1.4.0</blueprint.parser.version>
+ <blueprint.core.version>1.9.0-SNAPSHOT</blueprint.core.version>
+ <blueprint.parser.version>1.5.0-SNAPSHOT</blueprint.parser.version>
<!--
<lastReleaseVersion>1.0.4</lastReleaseVersion>
-->
@@ -71,7 +71,7 @@
<id>dev</id>
<properties>
<blueprint.api.version>1.0.1</blueprint.api.version>
- <blueprint.core.version>1.8.4-SNAPSHOT</blueprint.core.version>
+ <blueprint.core.version>1.9.0-SNAPSHOT</blueprint.core.version>
<blueprint.parser.version>1.5.0-SNAPSHOT</blueprint.parser.version>
</properties>
</profile>
Modified: aries/trunk/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintNamespaceHandler.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintNamespaceHandler.java?rev=1822985&r1=1822984&r2=1822985&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintNamespaceHandler.java (original)
+++ aries/trunk/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintNamespaceHandler.java Fri Feb 2 16:29:54 2018
@@ -16,6 +16,8 @@
*/
package org.apache.aries.blueprint.spring;
+import java.io.IOException;
+import java.net.URI;
import java.net.URL;
import java.util.Collections;
import java.util.Properties;
@@ -29,6 +31,8 @@ import org.apache.aries.blueprint.PassTh
import org.apache.aries.blueprint.mutable.MutableBeanMetadata;
import org.apache.aries.blueprint.mutable.MutablePassThroughMetadata;
import org.apache.aries.blueprint.mutable.MutableRefMetadata;
+import org.apache.aries.blueprint.parser.Parser;
+import org.apache.aries.blueprint.parser.ParserContextImpl;
import org.apache.aries.blueprint.services.ExtendedBlueprintContainer;
import org.osgi.framework.Bundle;
import org.osgi.service.blueprint.reflect.BeanMetadata;
@@ -53,6 +57,9 @@ import org.springframework.core.io.Resou
import org.springframework.core.io.UrlResource;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
+import org.xml.sax.EntityResolver;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
/**
* Blueprint NamespaceHandler wrapper for a spring NamespaceHandler
@@ -175,8 +182,13 @@ public class BlueprintNamespaceHandler i
bm.addArgument(createRef(parserContext, SPRING_APPLICATION_CONTEXT_ID), null, 0);
registry.registerComponentDefinition(bm);
}
- // Add the namespace handler's bundle to the application context classloader
- applicationContext.addSourceBundle(bundle);
+ // Add the namespace handlers' bundle to the application context classloader
+ for (URI uri : parserContext.getNamespaces()) {
+ NamespaceHandler ns = parserContext.getNamespaceHandler(uri);
+ if (ns instanceof BlueprintNamespaceHandler) {
+ applicationContext.addSourceBundle(((BlueprintNamespaceHandler) ns).bundle);
+ }
+ }
return springParserContext;
}
@@ -246,7 +258,7 @@ public class BlueprintNamespaceHandler i
}
}
- private org.springframework.beans.factory.xml.ParserContext createSpringParserContext(ParserContext parserContext, DefaultListableBeanFactory registry) {
+ private org.springframework.beans.factory.xml.ParserContext createSpringParserContext(final ParserContext parserContext, DefaultListableBeanFactory registry) {
try {
SpringVersionBridgeXmlBeanDefinitionReader xbdr = new SpringVersionBridgeXmlBeanDefinitionReader(registry);
Resource resource = new UrlResource(parserContext.getSourceNode().getOwnerDocument().getDocumentURI());
@@ -258,6 +270,29 @@ public class BlueprintNamespaceHandler i
xbdr.setEventListener(listener);
xbdr.setSourceExtractor(extractor);
xbdr.setNamespaceHandlerResolver(resolver);
+ xbdr.setEntityResolver(new EntityResolver() {
+ @Override
+ public InputSource resolveEntity(String publicId, String systemId) throws IOException {
+ for (URI ns : parserContext.getNamespaces()) {
+ NamespaceHandler nh = parserContext.getNamespaceHandler(ns);
+ URL url = null;
+ if (publicId != null) {
+ url = nh.getSchemaLocation(publicId);
+ }
+ if (url == null && systemId != null) {
+ url = nh.getSchemaLocation(systemId);
+ }
+ if (url != null) {
+ InputSource is = new InputSource();
+ is.setPublicId(publicId);
+ is.setSystemId(systemId);
+ is.setByteStream(url.openStream());
+ return is;
+ }
+ }
+ return null;
+ }
+ });
XmlReaderContext xmlReaderContext = xbdr.createReaderContext(resource);
BeanDefinitionParserDelegate bdpd = new BeanDefinitionParserDelegate(xmlReaderContext);
return new org.springframework.beans.factory.xml.ParserContext(xmlReaderContext, bdpd);