| /** |
| * 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 static org.apache.aries.blueprint.itests.Helper.blueprintBundles; |
| import static org.junit.Assert.assertNotNull; |
| import static org.ops4j.pax.exam.CoreOptions.keepCaches; |
| import static org.ops4j.pax.exam.CoreOptions.streamBundle; |
| import static org.ops4j.pax.exam.CoreOptions.systemProperty; |
| |
| 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.Aries1503aNamespaceHandler; |
| import org.apache.aries.blueprint.itests.cm.handler.Aries1503bNamespaceHandler; |
| 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.ServiceRegistration; |
| import org.osgi.service.blueprint.container.BlueprintEvent; |
| import org.osgi.service.blueprint.container.BlueprintListener; |
| |
| public class ParserServiceImportXSDsBetweenNamespaceHandlersTest extends AbstractBlueprintIntegrationTest { |
| |
| private static final String NS_HANDLER_BUNDLE = "org.apache.aries.blueprint.aries1503"; |
| private static final String NS_HANDLER2_BUNDLE = "org.apache.aries.blueprint.aries1503b"; |
| private static final String TEST_BUNDLE = "org.apache.aries.blueprint.aries1503.test"; |
| |
| @org.ops4j.pax.exam.Configuration |
| public Option[] config() { |
| return new Option[] { |
| baseOptions(), |
| systemProperty("org.ops4j.pax.logging.DefaultServiceLog.level").value("INFO"), |
| blueprintBundles(), |
| keepCaches(), |
| streamBundle(createAries1503aNamespaceHandlerBundle()).noStart(), |
| streamBundle(createAries1503bNamespaceHandlerBundle()), |
| streamBundle(createTestBundle()) |
| }; |
| } |
| |
| private InputStream createAries1503aNamespaceHandlerBundle() { |
| return TinyBundles.bundle() |
| .add(Aries1503aNamespaceHandler.class) |
| .add("OSGI-INF/blueprint/blueprint-aries-1503.xml", getResource("blueprint-aries-1503.xml")) |
| .add("blueprint-aries-1503.xsd", getResource("blueprint-aries-1503.xsd")) |
| .set(Constants.BUNDLE_SYMBOLICNAME, NS_HANDLER_BUNDLE) |
| .set(Constants.EXPORT_PACKAGE, Aries1503aNamespaceHandler.class.getPackage().getName()) |
| .set(Constants.IMPORT_PACKAGE, "org.apache.aries.blueprint,org.apache.aries.blueprint.ext," + |
| "org.apache.aries.blueprint.mutable," + |
| "org.osgi.service.blueprint.reflect,org.w3c.dom") |
| .build(TinyBundles.withBnd()); |
| } |
| |
| private InputStream createAries1503bNamespaceHandlerBundle() { |
| return TinyBundles.bundle() |
| .add(Aries1503bNamespaceHandler.class) |
| // add this class too - we don't want to play with split packages, etc. |
| .add(Aries1503aNamespaceHandler.class) |
| .add("OSGI-INF/blueprint/blueprint-aries-1503-2.xml", getResource("blueprint-aries-1503-2.xml")) |
| .add("blueprint-aries-1503-2.xsd", getResource("blueprint-aries-1503-2.xsd")) |
| .add("blueprint-aries-1503.xsd", getResource("blueprint-aries-1503.xsd")) |
| .set(Constants.BUNDLE_SYMBOLICNAME, NS_HANDLER2_BUNDLE) |
| .set(Constants.EXPORT_PACKAGE, Aries1503bNamespaceHandler.class.getPackage().getName()) |
| .set(Constants.IMPORT_PACKAGE, "org.apache.aries.blueprint,org.apache.aries.blueprint.ext," + |
| "org.apache.aries.blueprint.mutable," + |
| "org.osgi.service.blueprint.reflect,org.w3c.dom," + |
| Aries1503bNamespaceHandler.class.getPackage().getName()) |
| .build(TinyBundles.withBnd()); |
| } |
| |
| private InputStream createTestBundle() { |
| return TinyBundles.bundle() |
| .add("OSGI-INF/blueprint/ImportNamespacesTest.xml", getResource("ImportNamespacesTest.xml")) |
| .set(Constants.BUNDLE_SYMBOLICNAME, TEST_BUNDLE) |
| .set(Constants.IMPORT_PACKAGE, Aries1503bNamespaceHandler.class.getPackage().getName() |
| + ",org.apache.aries.blueprint,org.apache.aries.blueprint.ext") |
| .build(TinyBundles.withBnd()); |
| } |
| |
| @Test |
| public void testXSDImports() throws Exception { |
| waitForConfig(); |
| ParserService parserService = context().getService(ParserService.class); |
| URL blueprintXML = context().getBundleByName(TEST_BUNDLE).getEntry("OSGI-INF/blueprint/ImportNamespacesTest.xml"); |
| ComponentDefinitionRegistry cdr = parserService.parse(blueprintXML, context().getBundleByName(TEST_BUNDLE)); |
| assertNotNull(cdr.getComponentDefinition("aries-1503")); |
| } |
| |
| private void 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 ("org.apache.aries.blueprint.aries1503b".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); |
| } |
| } |
| } |
| finally { |
| reg.unregister(); |
| } |
| } |
| |
| } |