From commits-return-10004-archive-asf-public=cust-asf.ponee.io@aries.apache.org Fri Feb 2 17:29:58 2018 Return-Path: X-Original-To: archive-asf-public@eu.ponee.io Delivered-To: archive-asf-public@eu.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by mx-eu-01.ponee.io (Postfix) with ESMTP id C7B44180608 for ; Fri, 2 Feb 2018 17:29:58 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id B717C160C49; Fri, 2 Feb 2018 16:29:58 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id D8CFB160C41 for ; Fri, 2 Feb 2018 17:29:57 +0100 (CET) Received: (qmail 57528 invoked by uid 500); 2 Feb 2018 16:29:57 -0000 Mailing-List: contact commits-help@aries.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@aries.apache.org Delivered-To: mailing list commits@aries.apache.org Received: (qmail 57517 invoked by uid 99); 2 Feb 2018 16:29:57 -0000 Received: from Unknown (HELO svn01-us-west.apache.org) (209.188.14.144) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 02 Feb 2018 16:29:57 +0000 Received: from svn01-us-west.apache.org (localhost [127.0.0.1]) by svn01-us-west.apache.org (ASF Mail Server at svn01-us-west.apache.org) with ESMTP id 0FCD53A00D7 for ; Fri, 2 Feb 2018 16:29:55 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: 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... Date: Fri, 02 Feb 2018 16:29:54 -0000 To: commits@aries.apache.org From: gnodet@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20180202162956.0FCD53A00D7@svn01-us-west.apache.org> 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 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 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 1.0.0 - 1.6.2 - 1.4.0 + 1.9.0-SNAPSHOT + 1.5.0-SNAPSHOT @@ -71,7 +71,7 @@ dev 1.0.1 - 1.8.4-SNAPSHOT + 1.9.0-SNAPSHOT 1.5.0-SNAPSHOT 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);