diff --git a/examples/osgi-http-service/bundle/pom.xml b/examples/osgi-http-service/bundle/pom.xml index 8ac57977e2..f29505ecbe 100644 --- a/examples/osgi-http-service/bundle/pom.xml +++ b/examples/osgi-http-service/bundle/pom.xml @@ -41,7 +41,8 @@ --> - + 4.0.0 @@ -58,6 +59,10 @@ OSGi HttpService example bundle + + 4.3.5.RELEASE_1 + + org.glassfish.jersey.containers @@ -77,6 +82,42 @@ org.apache.felix.eventadmin provided + + + org.apache.servicemix.bundles + org.apache.servicemix.bundles.spring-beans + ${spring4.version} + + + + org.apache.servicemix.bundles + org.apache.servicemix.bundles.spring-core + ${spring4.version} + + + + org.apache.servicemix.bundles + org.apache.servicemix.bundles.spring-web + ${spring4.version} + + + + org.apache.servicemix.bundles + org.apache.servicemix.bundles.spring-aop + ${spring4.version} + + + + org.apache.servicemix.bundles + org.apache.servicemix.bundles.spring-context + ${spring4.version} + + + + org.apache.servicemix.bundles + org.apache.servicemix.bundles.spring-expression + ${spring4.version} + @@ -87,8 +128,22 @@ true - org.glassfish.jersey.examples.osgihttpservice - javax.servlet.*;version="[2.4,5.0)",* + + org.glassfish.jersey.examples.osgihttpservice, + org.glassfish.jersey.examples.osgihttpservice.spring + + + javax.servlet.*;version="[3.0,5.0)", + org.springframework.expression, + org.springframework.beans.factory, + org.springframework.beans.factory.xml, + org.springframework.cglib.core, + org.springframework.cglib.proxy, + org.springframework.beans, + org.springframework.context, + org.springframework.context.config, + * + org.glassfish.jersey.examples.osgihttpservice.Activator jersey-osgi-http-service-bundle ${project.version} diff --git a/examples/osgi-http-service/bundle/src/main/java/org/glassfish/jersey/examples/osgihttpservice/Activator.java b/examples/osgi-http-service/bundle/src/main/java/org/glassfish/jersey/examples/osgihttpservice/Activator.java index c87c40b410..eb0e365627 100644 --- a/examples/osgi-http-service/bundle/src/main/java/org/glassfish/jersey/examples/osgihttpservice/Activator.java +++ b/examples/osgi-http-service/bundle/src/main/java/org/glassfish/jersey/examples/osgihttpservice/Activator.java @@ -40,15 +40,7 @@ package org.glassfish.jersey.examples.osgihttpservice; -import java.util.Dictionary; -import java.util.HashMap; -import java.util.Hashtable; -import java.util.logging.Logger; - -import javax.servlet.ServletException; - import org.glassfish.jersey.servlet.ServletContainer; - import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; @@ -58,6 +50,10 @@ import org.osgi.service.http.NamespaceException; import org.osgi.util.tracker.ServiceTracker; +import javax.servlet.ServletException; +import java.util.HashMap; +import java.util.logging.Logger; + public class Activator implements BundleActivator { private BundleContext bc; @@ -119,7 +115,8 @@ private void rawRegisterServlets() throws ServletException, NamespaceException, ClassLoader originalContextClassLoader = Thread.currentThread().getContextClassLoader(); try { Thread.currentThread().setContextClassLoader(myClassLoader); - httpService.registerServlet("/jersey-http-service", new ServletContainer(), getJerseyServletParams(), null); + ServletContainer servletToRegister = new ServletContainer(new JerseyApplication()); + httpService.registerServlet("/jersey-http-service", servletToRegister, null, null); } finally { Thread.currentThread().setContextClassLoader(originalContextClassLoader); } @@ -150,11 +147,4 @@ private void unregisterServlets() { logger.info("JERSEY BUNDLE: SERVLETS UNREGISTERED"); } } - - @SuppressWarnings("UseOfObsoleteCollectionType") - private Dictionary getJerseyServletParams() { - Dictionary jerseyServletParams = new Hashtable<>(); - jerseyServletParams.put("javax.ws.rs.Application", JerseyApplication.class.getName()); - return jerseyServletParams; - } } diff --git a/examples/osgi-http-service/bundle/src/main/java/org/glassfish/jersey/examples/osgihttpservice/JerseyApplication.java b/examples/osgi-http-service/bundle/src/main/java/org/glassfish/jersey/examples/osgihttpservice/JerseyApplication.java index 52714120f1..d343aec784 100644 --- a/examples/osgi-http-service/bundle/src/main/java/org/glassfish/jersey/examples/osgihttpservice/JerseyApplication.java +++ b/examples/osgi-http-service/bundle/src/main/java/org/glassfish/jersey/examples/osgihttpservice/JerseyApplication.java @@ -40,17 +40,16 @@ package org.glassfish.jersey.examples.osgihttpservice; -import java.util.HashSet; -import java.util.Set; -import javax.ws.rs.core.Application; +import org.glassfish.jersey.server.ResourceConfig; +import org.springframework.context.support.ClassPathXmlApplicationContext; -public class JerseyApplication extends Application { +public class JerseyApplication extends ResourceConfig { - @Override - public Set> getClasses() { - Set> result = new HashSet>(); - result.add(StatusResource.class); - return result; - } + public JerseyApplication() { + property("contextConfig", new ClassPathXmlApplicationContext( + "org/glassfish/jersey/examples/osgihttpservice/spring/spring-context.xml")); + packages(false, "org.glassfish.jersey.examples.osgihttpservice.spring"); + register(StatusResource.class); + } } diff --git a/examples/osgi-http-service/bundle/src/main/java/org/glassfish/jersey/examples/osgihttpservice/spring/SpringResource.java b/examples/osgi-http-service/bundle/src/main/java/org/glassfish/jersey/examples/osgihttpservice/spring/SpringResource.java new file mode 100644 index 0000000000..37f3eea0e5 --- /dev/null +++ b/examples/osgi-http-service/bundle/src/main/java/org/glassfish/jersey/examples/osgihttpservice/spring/SpringResource.java @@ -0,0 +1,21 @@ +package org.glassfish.jersey.examples.osgihttpservice.spring; + +import javax.inject.Inject; +import javax.inject.Named; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; + +@Path("status2") +@Named +public class SpringResource { + + @Inject + private StatusGenerator statusGenerator; + + @GET + @Produces("text/plain") + public String getStatus() { + return statusGenerator.status(); + } +} diff --git a/examples/osgi-http-service/bundle/src/main/java/org/glassfish/jersey/examples/osgihttpservice/spring/StatusGenerator.java b/examples/osgi-http-service/bundle/src/main/java/org/glassfish/jersey/examples/osgihttpservice/spring/StatusGenerator.java new file mode 100644 index 0000000000..ccfa22dd22 --- /dev/null +++ b/examples/osgi-http-service/bundle/src/main/java/org/glassfish/jersey/examples/osgihttpservice/spring/StatusGenerator.java @@ -0,0 +1,6 @@ +package org.glassfish.jersey.examples.osgihttpservice.spring; + +public interface StatusGenerator { + + String status(); +} diff --git a/examples/osgi-http-service/bundle/src/main/java/org/glassfish/jersey/examples/osgihttpservice/spring/impl/DefaultStatusGenerator.java b/examples/osgi-http-service/bundle/src/main/java/org/glassfish/jersey/examples/osgihttpservice/spring/impl/DefaultStatusGenerator.java new file mode 100644 index 0000000000..27231bd1d7 --- /dev/null +++ b/examples/osgi-http-service/bundle/src/main/java/org/glassfish/jersey/examples/osgihttpservice/spring/impl/DefaultStatusGenerator.java @@ -0,0 +1,11 @@ +package org.glassfish.jersey.examples.osgihttpservice.spring.impl; + +import org.glassfish.jersey.examples.osgihttpservice.spring.StatusGenerator; + +public class DefaultStatusGenerator implements StatusGenerator { + + @Override + public String status() { + return "status from generator"; + } +} diff --git a/examples/osgi-http-service/bundle/src/main/resources/org/glassfish/jersey/examples/osgihttpservice/spring/spring-context.xml b/examples/osgi-http-service/bundle/src/main/resources/org/glassfish/jersey/examples/osgihttpservice/spring/spring-context.xml new file mode 100644 index 0000000000..6fb4f2f35f --- /dev/null +++ b/examples/osgi-http-service/bundle/src/main/resources/org/glassfish/jersey/examples/osgihttpservice/spring/spring-context.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/examples/osgi-http-service/functional-test/pom.xml b/examples/osgi-http-service/functional-test/pom.xml index 88c03f0ea2..ef7371318f 100644 --- a/examples/osgi-http-service/functional-test/pom.xml +++ b/examples/osgi-http-service/functional-test/pom.xml @@ -41,7 +41,8 @@ --> - + 4.0.0 @@ -91,11 +92,13 @@ org.apache.felix org.apache.felix.framework + 5.6.10 test org.apache.felix org.apache.felix.eventadmin + 1.4.10 test @@ -103,15 +106,18 @@ org.ops4j.pax.exam pax-exam + 4.11.0 test org.ops4j.pax.exam pax-exam-junit4 + 4.11.0 org.ops4j.pax.exam pax-exam-container-forked + 4.11.0 @@ -122,11 +128,49 @@ org.ops4j.pax.web pax-web-jetty-bundle + 6.1.1 test org.ops4j.pax.web - pax-web-extender-war + pax-web-api + 6.1.1 + test + + + org.ops4j.pax.web + pax-web-spi + 6.1.1 + test + + + org.apache.xbean + xbean-finder + 4.6 + test + + + org.apache.xbean + xbean-bundleutils + 4.6 + test + + + org.ow2.asm + asm + 6.0 + test + + + org.ow2.asm + asm-tree + 6.0 + test + + + org.ow2.asm + asm-commons + 6.0 test @@ -159,6 +203,16 @@ test + + org.glassfish.jersey.ext + jersey-spring4 + test + + + javax.servlet + javax.servlet-api + ${servlet3.version} + @@ -247,7 +301,7 @@ - + diff --git a/examples/osgi-http-service/functional-test/src/test/java/org/glassfish/jersey/examples/osgihttpservice/test/AbstractHttpServiceTest.java b/examples/osgi-http-service/functional-test/src/test/java/org/glassfish/jersey/examples/osgihttpservice/test/AbstractHttpServiceTest.java index 740e699056..702243f37a 100644 --- a/examples/osgi-http-service/functional-test/src/test/java/org/glassfish/jersey/examples/osgihttpservice/test/AbstractHttpServiceTest.java +++ b/examples/osgi-http-service/functional-test/src/test/java/org/glassfish/jersey/examples/osgihttpservice/test/AbstractHttpServiceTest.java @@ -40,6 +40,21 @@ package org.glassfish.jersey.examples.osgihttpservice.test; +import org.glassfish.jersey.internal.util.PropertiesHelper; +import org.ops4j.pax.exam.Configuration; +import org.ops4j.pax.exam.Option; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.BundleException; +import org.osgi.service.event.Event; +import org.osgi.service.event.EventConstants; +import org.osgi.service.event.EventHandler; + +import javax.inject.Inject; +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.UriBuilder; import java.net.URI; import java.security.AccessController; import java.util.ArrayList; @@ -53,23 +68,6 @@ import java.util.concurrent.TimeoutException; import java.util.logging.Logger; -import javax.ws.rs.client.Client; -import javax.ws.rs.client.ClientBuilder; -import javax.ws.rs.client.WebTarget; -import javax.ws.rs.core.UriBuilder; - -import javax.inject.Inject; - -import org.glassfish.jersey.internal.util.PropertiesHelper; - -import org.ops4j.pax.exam.Configuration; -import org.ops4j.pax.exam.Option; -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.BundleException; -import org.osgi.service.event.Event; -import org.osgi.service.event.EventConstants; -import org.osgi.service.event.EventHandler; import static org.junit.Assert.assertEquals; import static org.ops4j.pax.exam.CoreOptions.junitBundles; import static org.ops4j.pax.exam.CoreOptions.mavenBundle; @@ -84,10 +82,14 @@ public abstract class AbstractHttpServiceTest { @Inject BundleContext bundleContext; - /** maximum waiting time for runtime initialization and Jersey deployment */ - public static final long MAX_WAITING_SECONDS = 10L; + /** + * maximum waiting time for runtime initialization and Jersey deployment + */ + public static final long MAX_WAITING_SECONDS = 60L; - /** Latch for blocking the testing thread until the runtime is ready and Jersey deployed */ + /** + * Latch for blocking the testing thread until the runtime is ready and Jersey deployed + */ final CountDownLatch countDownLatch = new CountDownLatch(1); private static final int port = getProperty("jersey.config.test.container.port", 8080); @@ -102,8 +104,7 @@ public abstract class AbstractHttpServiceTest { public abstract List