Register service reference properties in application

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/f3e0d515
Tree: 
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/tree/f3e0d515
Diff: 
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/diff/f3e0d515

Branch: refs/heads/master
Commit: f3e0d5158ec5d18721bd737fe09e239929b5e31e
Parents: 5cb59ca
Author: Carlos Sierra <[email protected]>
Authored: Tue Dec 5 16:46:31 2017 +0100
Committer: Carlos Sierra <[email protected]>
Committed: Thu Dec 7 12:49:25 2017 +0100

----------------------------------------------------------------------
 jax-rs.itests/src/main/java/test/JaxrsTest.java | 64 ++++++++++++++++++++
 .../internal/CXFJaxRsServiceRegistrator.java    | 12 +++-
 .../jax/rs/whiteboard/internal/Whiteboard.java  |  4 +-
 3 files changed, 77 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/f3e0d515/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 988d8af..5be1e74 100644
--- a/jax-rs.itests/src/main/java/test/JaxrsTest.java
+++ b/jax-rs.itests/src/main/java/test/JaxrsTest.java
@@ -25,14 +25,17 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Dictionary;
+import java.util.HashSet;
 import java.util.Hashtable;
 import java.util.Iterator;
+import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.Function;
 import java.util.function.Predicate;
 
@@ -61,6 +64,7 @@ import test.types.TestFilter;
 import test.types.TestFilterAndExceptionMapper;
 import test.types.TestHelper;
 
+import javax.ws.rs.GET;
 import javax.ws.rs.client.InvocationCallback;
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.container.ContainerResponseFilter;
@@ -779,6 +783,29 @@ public class JaxrsTest extends TestHelper {
     }
 
     @Test
+    public void testDefaultServiceReferencePropertiesAreAvailableInFeatures() {
+        AtomicBoolean executed = new AtomicBoolean();
+        AtomicReference<Object> propertyvalue = new AtomicReference<>();
+
+        registerExtension(
+            Feature.class, featureContext -> {
+                executed.set(true);
+
+                Map<String, Object> properties =
+                    (Map<String, Object>)
+                        featureContext.getConfiguration().getProperty(
+                            "osgi.jaxrs.application.serviceProperties");
+                propertyvalue.set(properties.get(JAX_RS_NAME));
+
+                return false;
+            }, "Feature", JAX_RS_APPLICATION_SELECT,
+            "("+ JAX_RS_NAME + "=" + JAX_RS_DEFAULT_APPLICATION + ")");
+
+        assertTrue(executed.get());
+        assertEquals(JAX_RS_DEFAULT_APPLICATION, propertyvalue.get());
+    }
+
+    @Test
     public void testEndpointsOverride() {
         WebTarget webTarget = createDefaultTarget().path("conflict");
 
@@ -1113,6 +1140,43 @@ public class JaxrsTest extends TestHelper {
     }
 
     @Test
+    public void testServiceReferencePropertiesAreAvailableInFeatures() {
+        AtomicBoolean executed = new AtomicBoolean();
+        AtomicReference<Object> propertyvalue = new AtomicReference<>();
+
+        registerExtension(
+            Feature.class, featureContext -> {
+                executed.set(true);
+
+                Map<String, Object> properties =
+                    (Map<String, Object>)
+                        featureContext.getConfiguration().getProperty(
+                            "osgi.jaxrs.application.serviceProperties");
+                propertyvalue.set(properties.get("property"));
+
+                return false;
+            }, "Feature", JAX_RS_APPLICATION_SELECT, "(property=true)");
+
+        registerApplication(
+            new Application() {
+            @Override
+            public Set<Object> getSingletons() {
+                return Collections.singleton(
+                    new Object() {
+
+                        @GET
+                        public String hello() {
+                            return "hello";
+                        }
+                    });
+            }
+        }, JAX_RS_NAME, "test", "property", true);
+
+        assertTrue(executed.get());
+        assertEquals(true, propertyvalue.get());
+    }
+
+    @Test
     public void testStandaloneEndPoint() throws InterruptedException {
         WebTarget webTarget = createDefaultTarget().path("test");
 

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/f3e0d515/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/CXFJaxRsServiceRegistrator.java
----------------------------------------------------------------------
diff --git 
a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/CXFJaxRsServiceRegistrator.java
 
b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/CXFJaxRsServiceRegistrator.java
index 3af691e..5789637 100644
--- 
a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/CXFJaxRsServiceRegistrator.java
+++ 
b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/CXFJaxRsServiceRegistrator.java
@@ -20,7 +20,9 @@ package org.apache.aries.jax.rs.whiteboard.internal;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Comparator;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.TreeSet;
 import java.util.stream.Collectors;
@@ -48,9 +50,12 @@ import static 
org.apache.aries.jax.rs.whiteboard.internal.Utils.canonicalize;
 
 public class CXFJaxRsServiceRegistrator {
 
-    public CXFJaxRsServiceRegistrator(Bus bus, Application application) {
+    public CXFJaxRsServiceRegistrator(
+        Bus bus, Application application, Map<String, Object> properties) {
         _bus = bus;
         _application = application;
+        _properties = Collections.unmodifiableMap(new HashMap<>(properties));
+
 
         Comparator<ServiceTuple<?>> comparing = Comparator.comparing(
             ServiceTuple::getCachingServiceReference);
@@ -141,6 +146,7 @@ public class CXFJaxRsServiceRegistrator {
     }
 
     private final Application _application;
+    private Map<String, Object> _properties;
     private final Bus _bus;
     private final Collection<ServiceTuple<?>> _providers;
     private final Collection<ResourceProvider> _services = new ArrayList<>();
@@ -211,6 +217,10 @@ public class CXFJaxRsServiceRegistrator {
 
         jaxRsServerFactoryBean.setProvider(
             (Feature) featureContext -> {
+                featureContext.property(
+                    "osgi.jaxrs.application.serviceProperties",
+                    _properties);
+
                 for (ServiceTuple<?> provider : _providers) {
                     CachingServiceReference<?> cachingServiceReference =
                         provider.getCachingServiceReference();

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/f3e0d515/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Whiteboard.java
----------------------------------------------------------------------
diff --git 
a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Whiteboard.java
 
b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Whiteboard.java
index 4fc3dfb..256fa4b 100644
--- 
a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Whiteboard.java
+++ 
b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Whiteboard.java
@@ -328,9 +328,9 @@ public class Whiteboard {
         Bus bus, ServiceTuple<Application> tuple, Map<String, Object> props) {
 
         return
-            just(() -> new CXFJaxRsServiceRegistrator(bus, 
tuple.getService())).
+            just(() -> new CXFJaxRsServiceRegistrator(
+                bus, tuple.getService(), props)).
                 flatMap(registrator ->
-
             onClose(registrator::close).then(
             register(CXFJaxRsServiceRegistrator.class, registrator, props)));
     }

Reply via email to