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))); }
