You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by cs...@apache.org on 2017/02/22 16:50:59 UTC

[7/8] aries-jax-rs-whiteboard git commit: Readd support for application extension

Readd support for application extension


Project: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/repo
Commit: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/commit/7e1405d7
Tree: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/tree/7e1405d7
Diff: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/diff/7e1405d7

Branch: refs/heads/new-spec-with-component-dsl
Commit: 7e1405d7e2805f22f56ca510d82f186d04487418
Parents: 14c49ec
Author: Carlos Sierra <cs...@apache.org>
Authored: Wed Feb 22 17:45:47 2017 +0100
Committer: Carlos Sierra <cs...@apache.org>
Committed: Wed Feb 22 17:49:47 2017 +0100

----------------------------------------------------------------------
 jax-rs.itests/src/main/java/test/JaxrsTest.java | 174 +++++++++++++++++++
 .../activator/CXFJaxRsBundleActivator.java      |  15 ++
 2 files changed, 189 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/7e1405d7/jax-rs.itests/src/main/java/test/JaxrsTest.java
----------------------------------------------------------------------
diff --git a/jax-rs.itests/src/main/java/test/JaxrsTest.java b/jax-rs.itests/src/main/java/test/JaxrsTest.java
index 3fc9c52..f5b434b 100644
--- a/jax-rs.itests/src/main/java/test/JaxrsTest.java
+++ b/jax-rs.itests/src/main/java/test/JaxrsTest.java
@@ -105,6 +105,180 @@ public class JaxrsTest {
     }
 
     @Test
+    public void testApplicationEndpointExtension() {
+        Client client = createClient();
+
+        WebTarget webTarget = client.
+            target("http://localhost:8080").
+            path("/test-application").
+            path("extended");
+
+        ServiceRegistration<?> applicationRegistration = null;
+
+        ServiceRegistration<?> serviceRegistration = null;
+
+        try {
+            applicationRegistration = registerApplication();
+
+            serviceRegistration = registerAddon(
+                "osgi.jaxrs.application.select",
+                "(osgi.jaxrs.application.base=/test-application)");
+
+            assertEquals(
+                "Hello extended",
+                webTarget.request().get().readEntity(String.class));
+        }
+        finally {
+            if (applicationRegistration != null) {
+                applicationRegistration.unregister();
+            }
+            if (serviceRegistration != null) {
+                serviceRegistration.unregister();
+            }
+        }
+    }
+
+    @Test
+    public void testApplicationEndpointExtensionReadd() {
+        Client client = createClient();
+
+        WebTarget webTarget = client.
+            target("http://localhost:8080").
+            path("/test-application").
+            path("extended");
+
+        ServiceRegistration<?> applicationRegistration = null;
+
+        try {
+            applicationRegistration = registerApplication();
+
+            Runnable testCase = () -> {
+                assertEquals(webTarget.request().get().getStatus(), 404);
+
+                ServiceRegistration<?> serviceRegistration = null;
+
+                try {
+                    serviceRegistration = registerAddon(
+                        "osgi.jaxrs.application.select",
+                        "(osgi.jaxrs.application.base=/test-application)");
+
+                    assertEquals(
+                        "Hello extended",
+                        webTarget.request().get().readEntity(String.class));
+                }
+                finally {
+                    if (serviceRegistration != null) {
+                        serviceRegistration.unregister();
+                    }
+                }
+            };
+
+            testCase.run();
+
+            testCase.run();
+        }
+        finally {
+            if (applicationRegistration != null) {
+                applicationRegistration.unregister();
+            }
+
+        }
+    }
+
+    @Test
+    public void testApplicationProviderExtension() {
+        Client client = createClient();
+
+        WebTarget webTarget = client.
+            target("http://localhost:8080").
+            path("/test-application");
+
+        ServiceRegistration<?> applicationRegistration = null;
+
+        ServiceRegistration<?> filterRegistration = null;
+
+        try {
+            applicationRegistration = registerApplication();
+
+            filterRegistration = registerFilter(
+                "osgi.jaxrs.application.select",
+                "(osgi.jaxrs.application.base=/test-application)");
+
+            Response response = webTarget.request().get();
+
+            assertEquals(
+                "Hello application",
+                response.readEntity(String.class));
+
+            assertEquals(
+                response.getHeaders().getFirst("Filtered"),
+                "true");
+        }
+        finally {
+            if (applicationRegistration != null) {
+                applicationRegistration.unregister();
+            }
+            if (filterRegistration != null) {
+                filterRegistration.unregister();
+            }
+        }
+    }
+
+    @Test
+    public void testApplicationProviderExtensionReadd() {
+        Client client = createClient();
+
+        WebTarget webTarget = client.
+            target("http://localhost:8080").
+            path("/test-application");
+
+        ServiceRegistration<?> applicationRegistration = null;
+
+        try {
+            applicationRegistration = registerApplication();
+
+            assertEquals(
+                "Hello application",
+                webTarget.request().get().readEntity(String.class));
+
+            Runnable testCase = () ->  {
+                Response response = webTarget.request().get();
+
+                assertNull(response.getHeaders().getFirst("Filtered"));
+
+                ServiceRegistration<?> filterRegistration = null;
+
+                try {
+                    filterRegistration = registerFilter(
+                        "osgi.jaxrs.application.select",
+                        "(osgi.jaxrs.application.base=/test-application)");
+
+                    response = webTarget.request().get();
+
+                    assertEquals(
+                        response.getHeaders().getFirst("Filtered"),
+                        "true");
+                }
+                finally {
+                    if (filterRegistration != null) {
+                        filterRegistration.unregister();
+                    }
+                }
+            };
+
+            testCase.run();
+
+            testCase.run();
+
+        }
+        finally {
+            if (applicationRegistration != null) {
+                applicationRegistration.unregister();
+            }
+        }
+    }
+
+    @Test
     public void testStandaloneEndPoint() {
         Client client = createClient();
 

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/7e1405d7/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/activator/CXFJaxRsBundleActivator.java
----------------------------------------------------------------------
diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/activator/CXFJaxRsBundleActivator.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/activator/CXFJaxRsBundleActivator.java
index 4260db0..7ca04f5 100644
--- a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/activator/CXFJaxRsBundleActivator.java
+++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/activator/CXFJaxRsBundleActivator.java
@@ -49,6 +49,7 @@ import static org.apache.aries.osgi.functional.OSGi.nothing;
 import static org.apache.aries.osgi.functional.OSGi.onClose;
 import static org.apache.aries.osgi.functional.OSGi.register;
 import static org.apache.aries.osgi.functional.OSGi.serviceReferences;
+import static org.apache.aries.osgi.functional.OSGi.services;
 import static org.osgi.service.http.whiteboard.HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME;
 import static org.osgi.service.http.whiteboard.HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_SELECT;
 import static org.osgi.service.http.whiteboard.HttpWhiteboardConstants.HTTP_WHITEBOARD_DEFAULT_CONTEXT_NAME;
@@ -60,6 +61,7 @@ public class CXFJaxRsBundleActivator implements BundleActivator {
     private OSGiResult<?> _applicationsResult;
     private OSGiResult<?> _singletonsResult;
     private OSGiResult<?> _extensionsResult;
+    private OSGiResult<?> _applicationSingletonsResult;
 
     private static <T> OSGi<T> service(ServiceReference<T> serviceReference) {
         return
@@ -135,6 +137,18 @@ public class CXFJaxRsBundleActivator implements BundleActivator {
         );
 
         _extensionsResult = extensions.run(bundleContext);
+
+        OSGi<?> applicationSingletons =
+            serviceReferences("(osgi.jaxrs.application.select=*)").
+                flatMap(ref ->
+            just(ref.getProperty("osgi.jaxrs.application.select").toString()).
+                flatMap(applicationFilter ->
+            services(CXFJaxRsServiceRegistrator.class, applicationFilter).
+                flatMap(registrator ->
+            safeRegisterEndpoint(ref, registrator)
+        )));
+
+        _applicationSingletonsResult = applicationSingletons.run(bundleContext);
     }
 
     /**
@@ -261,6 +275,7 @@ public class CXFJaxRsBundleActivator implements BundleActivator {
     
     @Override
     public void stop(BundleContext context) throws Exception {
+        _applicationSingletonsResult.close();
         _applicationsResult.close();
         _extensionsResult.close();
         _singletonsResult.close();