/** * Copyright (C) 2011-2015 The XDocReport Team <xdocreport@googlegroups.com> * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package fr.opensagres.xdocreport.osgi.integrationtests.remoting; import static org.junit.Assert.assertNotNull; import static org.ops4j.pax.exam.CoreOptions.mavenBundle; import static org.ops4j.pax.exam.CoreOptions.options; import static org.ops4j.pax.exam.CoreOptions.systemProperty; import static org.ops4j.pax.exam.CoreOptions.when; import java.io.IOException; import java.net.Socket; import javax.inject.Inject; import org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean; import org.apache.cxf.jaxrs.client.WebClient; import org.codehaus.jackson.jaxrs.JacksonJsonProvider; import org.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.ops4j.pax.exam.Configuration; import org.ops4j.pax.exam.CoreOptions; import org.ops4j.pax.exam.Option; import org.ops4j.pax.exam.junit.PaxExam; import org.ops4j.pax.exam.spi.PaxExamRuntime; import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy; import org.ops4j.pax.exam.spi.reactors.PerClass; import org.osgi.framework.BundleContext; import fr.opensagres.xdocreport.remoting.resources.services.jaxrs.JAXRSResourcesService; @RunWith(PaxExam.class) @ExamReactorStrategy(PerClass.class) public class RemotingTest { @Configuration public Option[] config() { return options( CoreOptions.junitBundles(), systemProperty("org.osgi.service.http.port").value( Integer.toString(PORT)), systemProperty("org.ops4j.pax.web.session.timeout") .value(Integer.toString(300)), CoreOptions .cleanCaches(), // Run this test under Felix. CoreOptions.composite(cfxdosgi()), // TODO: // bundle("file:multibundle/apache-cxf-dosgi-ri-1.2/dosgi_bundles/spring-osgi-extender-1.2.0.jar").startLevel(6), systemProperty( "org.osgi.framework.startlevel.beginning") .value("" + 100) // For debugging... // opts.add(PaxRunnerOptions.vmOption( // "-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=6006" // )); // opts.add(CoreOptions.waitForFrameworkStartup()); // end debugging section. // end debugging section. ); } protected Option[] cfxdosgi() { Option[] options = { allowCustomLocalRepository(), //CoreOptions.webProfile(), mavenBundle( "fr.opensagres.xdocreport", "fr.opensagres.xdocreport.remoting.resources" ).versionAsInProject(), // converter API mavenBundle( "fr.opensagres.xdocreport", "fr.opensagres.xdocreport.remoting.resources.services.server" ).versionAsInProject(), // converter Iml mavenBundle( "fr.opensagres.xdocreport", "fr.opensagres.xdocreport.core" ).versionAsInProject(), // ***************** Gemini blueprint ******************** mavenBundle("org.springframework.osgi", "spring-osgi-core","1.2.1"), mavenBundle("org.springframework.osgi", "spring-osgi-io","1.2.1"), mavenBundle("org.springframework.osgi", "spring-osgi-extender","1.2.1").startLevel(5), mavenBundle("org.apache.geronimo.specs", "geronimo-annotation_1.0_spec", "1.1.1"), mavenBundle("javax.activation", "com.springsource.javax.activation", "1.1.1"), mavenBundle("javax.mail", "com.springsource.javax.mail", "1.4.0"), mavenBundle("org.apache.geronimo.specs", "geronimo-ws-metadata_2.0_spec", "1.1.2"), mavenBundle("org.apache.commons","com.springsource.org.apache.commons.logging","1.1.1"), mavenBundle("org.jdom", "com.springsource.org.jdom") .versionAsInProject(), mavenBundle("org.aopalliance", "com.springsource.org.aopalliance", "1.0.0"), mavenBundle("org.springframework", "org.springframework.aop", "3.0.6.RELEASE"), mavenBundle("org.springframework", "org.springframework.beans", "3.0.6.RELEASE"), mavenBundle("org.springframework", "org.springframework.context", "3.0.6.RELEASE"), mavenBundle("org.springframework", "org.springframework.core", "3.0.6.RELEASE"), mavenBundle("org.springframework", "org.springframework.transaction", "3.0.6.RELEASE"), mavenBundle("org.springframework", "org.springframework.orm", "3.0.6.RELEASE"), mavenBundle("org.springframework", "org.springframework.jdbc", "3.0.6.RELEASE"), mavenBundle("org.springframework", "org.springframework.asm", "3.0.6.RELEASE"), mavenBundle("org.springframework", "org.springframework.expression", "3.0.6.RELEASE"), mavenBundle("org.slf4j", "slf4j-api", "1.6.1"), mavenBundle("org.slf4j", "slf4j-simple", "1.6.1").noStart(), mavenBundle("org.ops4j.pax.web", "pax-web-jetty-bundle", "1.1.3"), mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.wsdl4j", "1.6.1_1"), mavenBundle("org.apache.cxf", "cxf-bundle-minimal").version( "2.5.2"), mavenBundle("org.apache.cxf.dosgi", "cxf-dosgi-ri-discovery-local").versionAsInProject(), mavenBundle("org.apache.cxf.dosgi", "cxf-dosgi-ri-dsw-cxf") .versionAsInProject(), mavenBundle("org.apache.cxf.dosgi", "cxf-dosgi-ri-topology-manager").versionAsInProject(), mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.xmlsec") .versionAsInProject(), mavenBundle("org.apache.ws.xmlschema", "xmlschema-core", "2.0.2"), mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.opensaml", "2.5.1_2"), mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.asm", "2.2.3_1"), mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.xmlresolver", "1.2_1"), mavenBundle("org.apache.neethi", "neethi", "3.0.2"), mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.woodstox", "3.2.7_1"), mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.commons-pool", "1.5.4_1"), mavenBundle("org.apache.servicemix.specs", "org.apache.servicemix.specs.saaj-api-1.3", "1.3.0"), mavenBundle("org.apache.servicemix.specs", "org.apache.servicemix.specs.stax-api-1.0", "1.3.0"), mavenBundle("org.apache.servicemix.specs", "org.apache.servicemix.specs.jaxb-api-2.2", "2.0.0"), mavenBundle("org.apache.servicemix.specs", "org.apache.servicemix.specs.jaxws-api-2.1", "1.3.0"), mavenBundle("org.apache.servicemix.specs", "org.apache.servicemix.specs.jsr311-api-1.1.1", "1.9.0"), mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.jaxb-impl", "2.1.6_1"), systemProperty("org.ops4j.pax.logging.DefaultServiceLog.level") .value("DEBUG"), // PaxRunnerOptions.cleanCaches(), // mavenBundle("org.osgi","org.osgi.compendium","4.2.0"), mavenBundle("org.osgi","org.osgi.enterprise","4.2.0"), // // CoreOptions.junitBundles(), // // // CoreOptions.compendiumProfile(), // // ***************** Gemini dependencies ******************** mavenBundle("org.codehaus.jackson", "jackson-jaxrs", "1.9.0"), mavenBundle("org.codehaus.jackson", "jackson-core-asl", "1.9.0"), mavenBundle("org.codehaus.jackson", "jackson-mapper-asl", "1.9.0"), }; return options; } protected static final int PORT = 10202; private static String createURL(String relativePath) { return "http://localhost:" + PORT + relativePath; } private void waitForPortToBeAvailable(int port) throws Exception { waitForFullInitialization(); for (int i = 0; i < 20; i++) { Socket s = null; try { s = new Socket((String) null, port); // yep, its available return; } catch (IOException e) { // wait } finally { if (s != null) { try { s.close(); } catch (IOException e) { } } } System.out.println("Waiting for server to appear on port: " + port); Thread.sleep(1000); } throw new java.util.concurrent.TimeoutException(); } protected static boolean initialized = false; public static boolean isInitialized() { return initialized; } public static void setInitialized(boolean initialized) { RemotingTest.initialized = initialized; } private void waitForFullInitialization() throws InterruptedException { if (!isInitialized()) { // I have to "wait" until the OSGi platform is fully initialized... // I'm still looking for a clever way of doing this (possibly // through listeners). Thread.sleep(15000); setInitialized(true); } } @Before public void setUp() throws Exception { waitForPortToBeAvailable(PORT); // Make an actual invocation on the remote service. cl = Thread.currentThread().getContextClassLoader(); Thread.currentThread().setContextClassLoader( JAXRSClientFactoryBean.class.getClassLoader()); } private ClassLoader cl; @After public void tearDown() { Thread.currentThread().setContextClassLoader(cl); } @Inject protected BundleContext ctx; @Ignore("Requires DOSGi") @Test public void getName() throws Exception { setUp(); assertNotNull(ctx); System.out.println("ctx " + ctx); //TODO // WebClient webClient = createWebClient(); // System.out.println("webClient " + webClient); // assertNotNull(webClient); // String name = webClient.accept(MediaType.APPLICATION_JSON) // .path("getName").get(String.class); // System.out.println(name); tearDown(); } public static void main(String[] args) throws Exception { RemotingTest jaxrsSMultibundleDistributionUnitTest=new RemotingTest(); PaxExamRuntime.createContainer( PaxExamRuntime.createTestSystem(jaxrsSMultibundleDistributionUnitTest.config() )).start(); } private static Option allowCustomLocalRepository() { //see: https://ops4j1.jira.com/browse/PAXEXAM-543 String localRepo = System.getProperty("maven.repo.local", ""); return when(localRepo.length() > 0).useOptions( systemProperty("org.ops4j.pax.url.mvn.localRepository").value(localRepo) ); } private WebClient createWebClient() { JAXRSClientFactoryBean factory = new JAXRSClientFactoryBean(); factory.setAddress(createURL("/")); factory.setResourceClass(JAXRSResourcesService.class); JacksonJsonProvider provider = new JacksonJsonProvider(); factory.setProvider(provider); WebClient webClient = factory.createWebClient(); return webClient; } }