Author: ggrzybek
Date: Tue Feb 28 08:49:05 2017
New Revision: 1784703

URL: http://svn.apache.org/viewvc?rev=1784703&view=rev
Log:
[ARIES-1682] Provide integration test for relatively <xsd:include>d XSDs

Added:
    
aries/trunk/blueprint/itests/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/ParserServiceImportAndIncludeXSDsTest.java
    
aries/trunk/blueprint/itests/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/cm/handler/Aries1682NamespaceHandler.java
    
aries/trunk/blueprint/itests/blueprint-itests/src/test/resources/ImportNamespacesWithXSDIncludeTest.xml
    
aries/trunk/blueprint/itests/blueprint-itests/src/test/resources/blueprint-aries-1682-common.xsd
    
aries/trunk/blueprint/itests/blueprint-itests/src/test/resources/blueprint-aries-1682.xml
    
aries/trunk/blueprint/itests/blueprint-itests/src/test/resources/blueprint-aries-1682.xsd

Added: 
aries/trunk/blueprint/itests/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/ParserServiceImportAndIncludeXSDsTest.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/itests/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/ParserServiceImportAndIncludeXSDsTest.java?rev=1784703&view=auto
==============================================================================
--- 
aries/trunk/blueprint/itests/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/ParserServiceImportAndIncludeXSDsTest.java
 (added)
+++ 
aries/trunk/blueprint/itests/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/ParserServiceImportAndIncludeXSDsTest.java
 Tue Feb 28 08:49:05 2017
@@ -0,0 +1,124 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.aries.blueprint.itests;
+
+import java.io.InputStream;
+import java.net.URL;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.apache.aries.blueprint.ComponentDefinitionRegistry;
+import org.apache.aries.blueprint.itests.cm.handler.Aries1682NamespaceHandler;
+import org.apache.aries.blueprint.services.ParserService;
+import org.junit.Test;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.tinybundles.core.TinyBundles;
+import org.osgi.framework.Constants;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.blueprint.container.BlueprintEvent;
+import org.osgi.service.blueprint.container.BlueprintListener;
+
+import static org.apache.aries.blueprint.itests.Helper.blueprintBundles;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.ops4j.pax.exam.CoreOptions.*;
+
+public class ParserServiceImportAndIncludeXSDsTest extends 
AbstractBlueprintIntegrationTest {
+
+    private static final String NS_HANDLER_BUNDLE = 
"org.apache.aries.blueprint.aries1682";
+    private static final String TEST_BUNDLE = 
"org.apache.aries.blueprint.aries1682.test";
+
+    @org.ops4j.pax.exam.Configuration
+    public Option[] config() {
+        return new Option[] {
+                baseOptions(),
+                
systemProperty("org.ops4j.pax.logging.DefaultServiceLog.level").value("DEBUG"),
+                blueprintBundles(),
+                keepCaches(),
+                streamBundle(createAries1682NamespaceHandlerBundle()),
+                streamBundle(createTestBundle())
+        };
+    }
+
+    private InputStream createAries1682NamespaceHandlerBundle() {
+        return TinyBundles.bundle()
+                .add(Aries1682NamespaceHandler.class)
+                .add("OSGI-INF/blueprint/blueprint-aries-1682.xml", 
getResource("blueprint-aries-1682.xml"))
+                .add("blueprint-aries-1682.xsd", 
getResource("blueprint-aries-1682.xsd"))
+                .add("blueprint-aries-1682-common.xsd", 
getResource("blueprint-aries-1682-common.xsd"))
+                .set(Constants.BUNDLE_SYMBOLICNAME, NS_HANDLER_BUNDLE)
+                .set(Constants.EXPORT_PACKAGE, 
Aries1682NamespaceHandler.class.getPackage().getName())
+                .set(Constants.IMPORT_PACKAGE, "org.apache.aries.blueprint," +
+                        "org.apache.aries.blueprint.ext," +
+                        "org.apache.aries.blueprint.mutable," +
+                        FrameworkUtil.class.getPackage().getName() + "," +
+                        "org.osgi.service.blueprint.reflect," +
+                        "org.w3c.dom")
+                .build(TinyBundles.withClassicBuilder());
+    }
+
+    private InputStream createTestBundle() {
+        return TinyBundles.bundle()
+                
.add("OSGI-INF/blueprint/ImportNamespacesWithXSDIncludeTest.xml", 
getResource("ImportNamespacesWithXSDIncludeTest.xml"))
+                .set(Constants.BUNDLE_SYMBOLICNAME, TEST_BUNDLE)
+                .set(Constants.IMPORT_PACKAGE, 
Aries1682NamespaceHandler.class.getPackage().getName()
+                        + 
",org.apache.aries.blueprint,org.apache.aries.blueprint.ext")
+                .build(TinyBundles.withBnd());
+    }
+
+    @Test
+    public void testXSDImports() throws Exception {
+        assertTrue(TEST_BUNDLE + " should correctly register blueprint 
container", waitForConfig());
+        ParserService parserService = 
context().getService(ParserService.class);
+        URL blueprintXML = 
context().getBundleByName(TEST_BUNDLE).getEntry("OSGI-INF/blueprint/ImportNamespacesWithXSDIncludeTest.xml");
+        ComponentDefinitionRegistry cdr = parserService.parse(blueprintXML, 
context().getBundleByName(TEST_BUNDLE));
+        assertNotNull(cdr.getComponentDefinition("aries-1682"));
+    }
+
+    private boolean waitForConfig() throws InterruptedException {
+        final AtomicBoolean ready = new AtomicBoolean();
+        @SuppressWarnings("rawtypes")
+        ServiceRegistration reg = context().registerService(
+                BlueprintListener.class,
+                new BlueprintListener() {
+                    @Override
+                    public void blueprintEvent(BlueprintEvent event) {
+                        if 
(TEST_BUNDLE.equals(event.getBundle().getSymbolicName())
+                                && BlueprintEvent.CREATED == event.getType()) {
+                            synchronized (ready) {
+                                ready.set(true);
+                                ready.notify();
+                            }
+                        }
+                    }
+                },
+                null);
+        try {
+            synchronized (ready) {
+                if (!ready.get()) {
+                    ready.wait(3000);
+                }
+            }
+            return ready.get();
+        } finally {
+            reg.unregister();
+        }
+    }
+
+}

Added: 
aries/trunk/blueprint/itests/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/cm/handler/Aries1682NamespaceHandler.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/itests/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/cm/handler/Aries1682NamespaceHandler.java?rev=1784703&view=auto
==============================================================================
--- 
aries/trunk/blueprint/itests/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/cm/handler/Aries1682NamespaceHandler.java
 (added)
+++ 
aries/trunk/blueprint/itests/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/cm/handler/Aries1682NamespaceHandler.java
 Tue Feb 28 08:49:05 2017
@@ -0,0 +1,94 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.aries.blueprint.itests.cm.handler;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.aries.blueprint.NamespaceHandler;
+import org.apache.aries.blueprint.ParserContext;
+import org.apache.aries.blueprint.PassThroughMetadata;
+import org.apache.aries.blueprint.mutable.MutableBeanMetadata;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.service.blueprint.reflect.BeanMetadata;
+import org.osgi.service.blueprint.reflect.ComponentMetadata;
+import org.osgi.service.blueprint.reflect.Metadata;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+public class Aries1682NamespaceHandler implements NamespaceHandler {
+
+    @Override
+    public URL getSchemaLocation(String namespace) {
+        if 
("http://aries.apache.org/blueprint/xmlns/blueprint-aries-1682/v1.0.0".equals(namespace))
 {
+            try {
+                return new URL("jar:" + 
FrameworkUtil.getBundle(this.getClass()).getLocation() + 
"!/blueprint-aries-1682.xsd");
+            } catch (MalformedURLException e) {
+                throw new RuntimeException(e.getMessage(), e);
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public Set<Class> getManagedClasses() {
+        return new 
HashSet<Class>(Collections.<Class>singletonList(String.class));
+    }
+
+    @Override
+    public Metadata parse(Element element, ParserContext context) {
+        MutableBeanMetadata metadata = 
context.createMetadata(MutableBeanMetadata.class);
+        metadata.setProcessor(true);
+        metadata.setId("aries-1682");
+        metadata.setScope(BeanMetadata.SCOPE_SINGLETON);
+        metadata.addArgument(new PassThroughMetadata() {
+            @Override
+            public Object getObject() {
+                return "ARIES-1682";
+            }
+
+            @Override
+            public String getId() {
+                return "aries-1682-arg";
+            }
+
+            @Override
+            public int getActivation() {
+                return 0;
+            }
+
+            @Override
+            public List<String> getDependsOn() {
+                return null;
+            }
+        }, null, 0);
+        metadata.setRuntimeClass(String.class);
+        return metadata;
+    }
+
+    @Override
+    public ComponentMetadata decorate(Node node, ComponentMetadata component, 
ParserContext context) {
+        return null;
+    }
+
+}

Added: 
aries/trunk/blueprint/itests/blueprint-itests/src/test/resources/ImportNamespacesWithXSDIncludeTest.xml
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/itests/blueprint-itests/src/test/resources/ImportNamespacesWithXSDIncludeTest.xml?rev=1784703&view=auto
==============================================================================
--- 
aries/trunk/blueprint/itests/blueprint-itests/src/test/resources/ImportNamespacesWithXSDIncludeTest.xml
 (added)
+++ 
aries/trunk/blueprint/itests/blueprint-itests/src/test/resources/ImportNamespacesWithXSDIncludeTest.xml
 Tue Feb 28 08:49:05 2017
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+        Licensed to the Apache Software Foundation (ASF) under one or more
+        contributor license agreements. See the NOTICE file distributed with
+        this work for additional information regarding copyright ownership.
+        The ASF licenses this file to You under the Apache License, Version
+        2.0 (the "License"); you may not use this file except in compliance
+        with the License. You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+        applicable law or agreed to in writing, software distributed under the
+        License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+        CONDITIONS OF ANY KIND, either express or implied. See the License for
+        the specific language governing permissions and limitations under the
+        License.
+    -->
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";
+        
xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0";
+        
xmlns:a1682="http://aries.apache.org/blueprint/xmlns/blueprint-aries-1682/v1.0.0";>
+
+    <a1682:property-placeholder2 id="aries1682">
+        <ext:location>asd</ext:location>
+    </a1682:property-placeholder2>
+
+</blueprint>

Added: 
aries/trunk/blueprint/itests/blueprint-itests/src/test/resources/blueprint-aries-1682-common.xsd
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/itests/blueprint-itests/src/test/resources/blueprint-aries-1682-common.xsd?rev=1784703&view=auto
==============================================================================
--- 
aries/trunk/blueprint/itests/blueprint-itests/src/test/resources/blueprint-aries-1682-common.xsd
 (added)
+++ 
aries/trunk/blueprint/itests/blueprint-itests/src/test/resources/blueprint-aries-1682-common.xsd
 Tue Feb 28 08:49:05 2017
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements. See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version
+    2.0 (the "License"); you may not use this file except in compliance
+    with the License. You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+    applicable law or agreed to in writing, software distributed under the
+    License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+    CONDITIONS OF ANY KIND, either express or implied. See the License for
+    the specific language governing permissions and limitations under the
+    License.
+-->
+<xsd:schema 
xmlns="http://aries.apache.org/blueprint/xmlns/blueprint-aries-1682/v1.0.0";
+            
xmlns:ext100="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0";
+            xmlns:xsd="http://www.w3.org/2001/XMLSchema";
+            xmlns:bp="http://www.osgi.org/xmlns/blueprint/v1.0.0";
+            
targetNamespace="http://aries.apache.org/blueprint/xmlns/blueprint-aries-1682/v1.0.0";
+            elementFormDefault="qualified"
+            attributeFormDefault="unqualified"
+            version="1.0.0">
+
+    <xsd:import namespace="http://www.osgi.org/xmlns/blueprint/v1.0.0"; />
+    <xsd:import 
namespace="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0"; />
+
+    <xsd:element name="property-placeholder" type="TpropertyPlaceholder"/>
+
+    <xsd:complexType name="TpropertyPlaceholder">
+        <xsd:complexContent>
+            <xsd:extension base="bp:Tcomponent">
+                <xsd:sequence>
+                    <xsd:element ref="ext100:location" />
+                </xsd:sequence>
+            </xsd:extension>
+        </xsd:complexContent>
+    </xsd:complexType>
+
+</xsd:schema>

Added: 
aries/trunk/blueprint/itests/blueprint-itests/src/test/resources/blueprint-aries-1682.xml
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/itests/blueprint-itests/src/test/resources/blueprint-aries-1682.xml?rev=1784703&view=auto
==============================================================================
--- 
aries/trunk/blueprint/itests/blueprint-itests/src/test/resources/blueprint-aries-1682.xml
 (added)
+++ 
aries/trunk/blueprint/itests/blueprint-itests/src/test/resources/blueprint-aries-1682.xml
 Tue Feb 28 08:49:05 2017
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+        Licensed to the Apache Software Foundation (ASF) under one or more
+        contributor license agreements. See the NOTICE file distributed with
+        this work for additional information regarding copyright ownership.
+        The ASF licenses this file to You under the Apache License, Version
+        2.0 (the "License"); you may not use this file except in compliance
+        with the License. You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+        applicable law or agreed to in writing, software distributed under the
+        License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+        CONDITIONS OF ANY KIND, either express or implied. See the License for
+        the specific language governing permissions and limitations under the
+        License.
+    -->
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"; 
default-activation="lazy">
+
+    <bean id="Aries1682NamespaceHandler" 
class="org.apache.aries.blueprint.itests.cm.handler.Aries1682NamespaceHandler"/>
+
+    <service ref="Aries1682NamespaceHandler" 
interface="org.apache.aries.blueprint.NamespaceHandler">
+        <service-properties>
+            <entry key="osgi.service.blueprint.namespace" 
value="http://aries.apache.org/blueprint/xmlns/blueprint-aries-1682/v1.0.0"/>
+        </service-properties>
+    </service>
+
+</blueprint>

Added: 
aries/trunk/blueprint/itests/blueprint-itests/src/test/resources/blueprint-aries-1682.xsd
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/itests/blueprint-itests/src/test/resources/blueprint-aries-1682.xsd?rev=1784703&view=auto
==============================================================================
--- 
aries/trunk/blueprint/itests/blueprint-itests/src/test/resources/blueprint-aries-1682.xsd
 (added)
+++ 
aries/trunk/blueprint/itests/blueprint-itests/src/test/resources/blueprint-aries-1682.xsd
 Tue Feb 28 08:49:05 2017
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements. See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version
+    2.0 (the "License"); you may not use this file except in compliance
+    with the License. You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+    applicable law or agreed to in writing, software distributed under the
+    License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+    CONDITIONS OF ANY KIND, either express or implied. See the License for
+    the specific language governing permissions and limitations under the
+    License.
+-->
+<xsd:schema 
xmlns="http://aries.apache.org/blueprint/xmlns/blueprint-aries-1682/v1.0.0";
+            
xmlns:a1682="http://aries.apache.org/blueprint/xmlns/blueprint-aries-1682/v1.0.0";
+            xmlns:xsd="http://www.w3.org/2001/XMLSchema";
+            
targetNamespace="http://aries.apache.org/blueprint/xmlns/blueprint-aries-1682/v1.0.0";
+            elementFormDefault="qualified"
+            attributeFormDefault="unqualified"
+            version="1.0.0">
+
+    <xsd:include schemaLocation="./blueprint-aries-1682-common.xsd" />
+
+    <xsd:element name="property-placeholder2" type="TpropertyPlaceholder2"/>
+
+    <xsd:complexType name="TpropertyPlaceholder2">
+        <xsd:complexContent>
+            <xsd:extension base="a1682:TpropertyPlaceholder" />
+        </xsd:complexContent>
+    </xsd:complexType>
+
+</xsd:schema>


Reply via email to