Refactor to include default application in DTOs
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/7c1fce86 Tree: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/tree/7c1fce86 Diff: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/diff/7c1fce86 Branch: refs/heads/master Commit: 7c1fce8609ff45ef80e12b3dcac3ddc38cd284e9 Parents: 216070b Author: Carlos Sierra <[email protected]> Authored: Tue Aug 22 18:16:58 2017 +0200 Committer: Carlos Sierra <[email protected]> Committed: Tue Aug 22 18:16:58 2017 +0200 ---------------------------------------------------------------------- jax-rs.itests/src/main/java/test/JaxrsTest.java | 64 +++++++-------- .../internal/AriesJaxRSServiceRuntime.java | 34 ++++---- .../internal/CXFJaxRsServiceRegistrator.java | 20 ----- .../aries/jax/rs/whiteboard/internal/Utils.java | 12 +++ .../jax/rs/whiteboard/internal/Whiteboard.java | 83 +++++++++++--------- 5 files changed, 104 insertions(+), 109 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/7c1fce86/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 ecf817a..f089eb6 100644 --- a/jax-rs.itests/src/main/java/test/JaxrsTest.java +++ b/jax-rs.itests/src/main/java/test/JaxrsTest.java @@ -69,14 +69,14 @@ public class JaxrsTest extends TestHelper { try { JaxRSServiceRuntime runtime = getJaxRSServiceRuntime(); - assertEquals(0, runtime.getRuntimeDTO().applicationDTOs.length); + assertEquals(1, runtime.getRuntimeDTO().applicationDTOs.length); assertNotNull(runtime); serviceRegistration = registerApplication( new TestApplication()); - assertEquals(1, runtime.getRuntimeDTO().applicationDTOs.length); + assertEquals(2, runtime.getRuntimeDTO().applicationDTOs.length); Client client = createClient(); @@ -239,12 +239,12 @@ public class JaxrsTest extends TestHelper { ServiceRegistration<?> serviceRegistration2; try { - assertEquals(0, runtime.getRuntimeDTO().applicationDTOs.length); + assertEquals(1, runtime.getRuntimeDTO().applicationDTOs.length); assertEquals(0, runtime.getRuntimeDTO().failedApplicationDTOs.length); serviceRegistration = registerApplication(new TestApplication()); - assertEquals(1, runtime.getRuntimeDTO().applicationDTOs.length); + assertEquals(2, runtime.getRuntimeDTO().applicationDTOs.length); assertEquals(0, runtime.getRuntimeDTO().failedApplicationDTOs.length); Response response = webTarget.request().get(); @@ -256,7 +256,7 @@ public class JaxrsTest extends TestHelper { serviceRegistration2 = registerApplication( new TestApplicationConflict(), "service.ranking", 1); - assertEquals(1, runtime.getRuntimeDTO().applicationDTOs.length); + assertEquals(2, runtime.getRuntimeDTO().applicationDTOs.length); assertEquals(1, runtime.getRuntimeDTO().failedApplicationDTOs.length); response = webTarget.request().get(); @@ -271,7 +271,7 @@ public class JaxrsTest extends TestHelper { serviceRegistration2.unregister(); - assertEquals(1, runtime.getRuntimeDTO().applicationDTOs.length); + assertEquals(2, runtime.getRuntimeDTO().applicationDTOs.length); assertEquals(0, runtime.getRuntimeDTO().failedApplicationDTOs.length); response = webTarget.request().get(); @@ -392,7 +392,7 @@ public class JaxrsTest extends TestHelper { JaxRSServiceRuntime runtime = getJaxRSServiceRuntime(); Runnable testCase = () -> { - assertEquals(0, runtime.getRuntimeDTO().applicationDTOs.length); + int applications = runtime.getRuntimeDTO().applicationDTOs.length; assertEquals(404, webTarget.request().get().getStatus()); @@ -408,7 +408,9 @@ public class JaxrsTest extends TestHelper { get(). readEntity(String.class)); - assertEquals(1, runtime.getRuntimeDTO().applicationDTOs.length); + assertEquals( + applications + 1, + runtime.getRuntimeDTO().applicationDTOs.length); } finally { if (serviceRegistration != null) { @@ -481,13 +483,13 @@ public class JaxrsTest extends TestHelper { JaxRSServiceRuntime runtime = getJaxRSServiceRuntime(); - assertEquals(0, runtime.getRuntimeDTO().applicationDTOs.length); + assertEquals(1, runtime.getRuntimeDTO().applicationDTOs.length); assertEquals(0, runtime.getRuntimeDTO().failedApplicationDTOs.length); ServiceRegistration<Application> serviceRegistration = registerApplication(new TestApplication()); - assertEquals(1, runtime.getRuntimeDTO().applicationDTOs.length); + assertEquals(2, runtime.getRuntimeDTO().applicationDTOs.length); assertEquals(0, runtime.getRuntimeDTO().failedApplicationDTOs.length); assertEquals( @@ -497,7 +499,7 @@ public class JaxrsTest extends TestHelper { ServiceRegistration<Application> ungettableServiceRegistration = registerUngettableApplication("service.ranking", 1); - assertEquals(1, runtime.getRuntimeDTO().applicationDTOs.length); + assertEquals(2, runtime.getRuntimeDTO().applicationDTOs.length); assertEquals(1, runtime.getRuntimeDTO().failedApplicationDTOs.length); assertEquals( @@ -510,14 +512,14 @@ public class JaxrsTest extends TestHelper { serviceRegistration.unregister(); - assertEquals(0, runtime.getRuntimeDTO().applicationDTOs.length); + assertEquals(1, runtime.getRuntimeDTO().applicationDTOs.length); assertEquals(1, runtime.getRuntimeDTO().failedApplicationDTOs.length); assertEquals(404, webTarget.request().get().getStatus()); ungettableServiceRegistration.unregister(); - assertEquals(0, runtime.getRuntimeDTO().applicationDTOs.length); + assertEquals(1, runtime.getRuntimeDTO().applicationDTOs.length); assertEquals(0, runtime.getRuntimeDTO().failedApplicationDTOs.length); } @@ -533,13 +535,13 @@ public class JaxrsTest extends TestHelper { JaxRSServiceRuntime runtime = getJaxRSServiceRuntime(); - assertEquals(0, runtime.getRuntimeDTO().applicationDTOs.length); + assertEquals(1, runtime.getRuntimeDTO().applicationDTOs.length); assertEquals(0, runtime.getRuntimeDTO().failedApplicationDTOs.length); ServiceRegistration<Application> serviceRegistration = registerApplication(new TestApplication()); - assertEquals(1, runtime.getRuntimeDTO().applicationDTOs.length); + assertEquals(2, runtime.getRuntimeDTO().applicationDTOs.length); assertEquals(0, runtime.getRuntimeDTO().failedApplicationDTOs.length); assertEquals( @@ -549,7 +551,7 @@ public class JaxrsTest extends TestHelper { ServiceRegistration<Application> ungettableServiceRegistration = registerUngettableApplication("service.ranking", -1); - assertEquals(1, runtime.getRuntimeDTO().applicationDTOs.length); + assertEquals(2, runtime.getRuntimeDTO().applicationDTOs.length); assertEquals(1, runtime.getRuntimeDTO().failedApplicationDTOs.length); assertEquals( @@ -562,14 +564,14 @@ public class JaxrsTest extends TestHelper { serviceRegistration.unregister(); - assertEquals(0, runtime.getRuntimeDTO().applicationDTOs.length); + assertEquals(1, runtime.getRuntimeDTO().applicationDTOs.length); assertEquals(1, runtime.getRuntimeDTO().failedApplicationDTOs.length); assertEquals(404, webTarget.request().get().getStatus()); ungettableServiceRegistration.unregister(); - assertEquals(0, runtime.getRuntimeDTO().applicationDTOs.length); + assertEquals(1, runtime.getRuntimeDTO().applicationDTOs.length); assertEquals(0, runtime.getRuntimeDTO().failedApplicationDTOs.length); } @@ -577,13 +579,13 @@ public class JaxrsTest extends TestHelper { public void testNotGettableApplication() throws InterruptedException { JaxRSServiceRuntime runtime = getJaxRSServiceRuntime(); - assertEquals(0, runtime.getRuntimeDTO().applicationDTOs.length); + assertEquals(1, runtime.getRuntimeDTO().applicationDTOs.length); assertEquals(0, runtime.getRuntimeDTO().failedApplicationDTOs.length); ServiceRegistration<Application> serviceRegistration = registerUngettableApplication(); - assertEquals(0, runtime.getRuntimeDTO().applicationDTOs.length); + assertEquals(1, runtime.getRuntimeDTO().applicationDTOs.length); assertEquals(1, runtime.getRuntimeDTO().failedApplicationDTOs.length); assertEquals( @@ -592,21 +594,25 @@ public class JaxrsTest extends TestHelper { serviceRegistration.unregister(); - assertEquals(0, runtime.getRuntimeDTO().applicationDTOs.length); + assertEquals(1, runtime.getRuntimeDTO().applicationDTOs.length); assertEquals(0, runtime.getRuntimeDTO().failedApplicationDTOs.length); } @Test - public void testStandaloneEndPoint() { + public void testStandaloneEndPoint() throws InterruptedException { Client client = createClient(); WebTarget webTarget = client. target("http://localhost:8080"). path("test"); + JaxRSServiceRuntime runtime = getJaxRSServiceRuntime(); + ServiceRegistration<?> serviceRegistration = null; try { + runtime.getRuntimeDTO(); + serviceRegistration = registerAddon(new TestAddon()); Response response = webTarget.request().get(); @@ -964,20 +970,6 @@ public class JaxrsTest extends TestHelper { Object.class, testFilter, properties); } - /*private ServiceRegistration<?> registerFilter(Object... keyValues) { - - TestFilter testFilter = new TestFilter(); - - Dictionary<String, Object> properties = new Hashtable<>(); - - for (int i = 0; i < keyValues.length; i = i + 2) { - properties.put(keyValues[i].toString(), keyValues[i + 1]); - } - - return bundleContext.registerService( - Object.class, testFilter, properties); - }*/ - private ServiceRegistration<Application> registerUngettableApplication( Object... keyValues) { http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/7c1fce86/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/AriesJaxRSServiceRuntime.java ---------------------------------------------------------------------- diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/AriesJaxRSServiceRuntime.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/AriesJaxRSServiceRuntime.java index 140e82e..da6de71 100644 --- a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/AriesJaxRSServiceRuntime.java +++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/AriesJaxRSServiceRuntime.java @@ -31,18 +31,20 @@ import org.osgi.service.jaxrs.runtime.dto.RuntimeDTO; import org.osgi.service.jaxrs.whiteboard.JaxRSWhiteboardConstants; import javax.ws.rs.core.Application; +import java.util.Map; import java.util.Set; import java.util.TreeSet; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Stream; +import static org.apache.aries.jax.rs.whiteboard.internal.Utils.getProperties; import static org.osgi.service.jaxrs.whiteboard.JaxRSWhiteboardConstants.JAX_RS_NAME; public class AriesJaxRSServiceRuntime implements JaxRSServiceRuntime { private static final long serialVersionUID = 1L; - private ConcurrentHashMap<String, ServiceReference<Application>> + private ConcurrentHashMap<String, Map<String, Object>> _applications = new ConcurrentHashMap<>(); private ConcurrentHashMap<String, Set<ServiceReference<?>>> @@ -96,13 +98,13 @@ public class AriesJaxRSServiceRuntime implements JaxRSServiceRuntime { _ungettableExtensions.remove(serviceReference); } - public ServiceReference<Application> setApplicationForPath( - String path, ServiceReference<Application> serviceReference) { + public Map<String, Object> setApplicationForPath( + String path, Map<String, Object> properties) { - return _applications.put(path, serviceReference); + return _applications.put(path, properties); } - public ServiceReference<Application> unsetApplicationForPath(String path) { + public Map<String, Object> unsetApplicationForPath(String path) { return _applications.remove(path); } @@ -268,14 +270,13 @@ public class AriesJaxRSServiceRuntime implements JaxRSServiceRuntime { } private ApplicationDTO buildApplicationDTO( - ServiceReference<Application> serviceReference) { + Map<String, Object> properties) { ApplicationDTO applicationDTO = new ApplicationDTO(){}; - applicationDTO.name = getApplicationName(serviceReference); - applicationDTO.base = Whiteboard.getApplicationBase(serviceReference); - applicationDTO.serviceId = (Long)serviceReference.getProperty( - "service.id"); + applicationDTO.name = getApplicationName(properties); + applicationDTO.base = Whiteboard.getApplicationBase(properties); + applicationDTO.serviceId = (Long)properties.get("service.id"); applicationDTO.resourceDTOs = getApplicationEndpointsStream( applicationDTO.name).toArray( @@ -351,7 +352,7 @@ public class AriesJaxRSServiceRuntime implements JaxRSServiceRuntime { JaxRSWhiteboardConstants.JAX_RS_NAME); failedApplicationDTO.name = nameProperty == null ? - generateApplicationName(serviceReference) : + generateApplicationName(getProperties(serviceReference)) : nameProperty.toString(); failedApplicationDTO.failureReason = reason; @@ -359,23 +360,22 @@ public class AriesJaxRSServiceRuntime implements JaxRSServiceRuntime { return failedApplicationDTO; } - public static String getApplicationName( - ServiceReference<?> serviceReference) { + public static String getApplicationName(Map<String, Object> properties) { - Object property = serviceReference.getProperty(JAX_RS_NAME); + Object property = properties.get(JAX_RS_NAME); if (property == null) { - return generateApplicationName(serviceReference); + return generateApplicationName(properties); } return property.toString(); } public static String generateApplicationName( - ServiceReference<?> serviceReference) { + Map<String, Object> properties) { return ".jax-rs-application-" + - serviceReference.getProperty("service.id").toString(); + properties.get("service.id").toString(); } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/7c1fce86/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 a43abba..50d51a7 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 @@ -19,8 +19,6 @@ package org.apache.aries.jax.rs.whiteboard.internal; import java.util.ArrayList; import java.util.Collection; -import java.util.HashMap; -import java.util.Map; import javax.ws.rs.core.Application; @@ -35,7 +33,6 @@ import org.apache.cxf.jaxrs.model.OperationResourceInfo; import org.apache.cxf.jaxrs.provider.json.JSONProvider; import org.apache.cxf.jaxrs.utils.ResourceUtils; import org.apache.cxf.message.Message; -import org.osgi.framework.ServiceReference; public class CXFJaxRsServiceRegistrator { @@ -46,8 +43,6 @@ public class CXFJaxRsServiceRegistrator { private Server _server; private final Collection<ResourceProvider> _services = new ArrayList<>(); - private static final String CXF_ENDPOINT_ADDRESS = "CXF_ENDPOINT_ADDRESS"; - public CXFJaxRsServiceRegistrator(Bus bus, Application application) { _bus = bus; _application = application; @@ -55,21 +50,6 @@ public class CXFJaxRsServiceRegistrator { rewire(); } - public static Map<String, Object> getProperties( - ServiceReference<?> sref, String addressKey) { - - String[] propertyKeys = sref.getPropertyKeys(); - Map<String, Object> properties = new HashMap<>(propertyKeys.length); - - for (String key : propertyKeys) { - properties.put(key, sref.getProperty(key)); - } - - properties.put( - CXF_ENDPOINT_ADDRESS, sref.getProperty(addressKey).toString()); - return properties; - } - public void add(ResourceProvider resourceProvider) { if (_closed) { return; http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/7c1fce86/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Utils.java ---------------------------------------------------------------------- diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Utils.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Utils.java index 0a343bf..2506be3 100644 --- a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Utils.java +++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Utils.java @@ -28,6 +28,7 @@ import org.osgi.service.jaxrs.runtime.dto.FailedApplicationDTO; import javax.ws.rs.core.Application; import java.util.Comparator; +import java.util.HashMap; import java.util.Map; import java.util.NavigableSet; import java.util.SortedSet; @@ -47,6 +48,17 @@ import static org.apache.aries.osgi.functional.OSGi.register; */ public class Utils { + public static Map<String, Object> getProperties(ServiceReference<?> sref) { + String[] propertyKeys = sref.getPropertyKeys(); + Map<String, Object> properties = new HashMap<>(propertyKeys.length); + + for (String key : propertyKeys) { + properties.put(key, sref.getProperty(key)); + } + + return properties; + } + public static <T> OSGi<T> service(ServiceReference<T> serviceReference) { return bundleContext().flatMap(bundleContext -> http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/7c1fce86/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 cb2c078..aaf6220 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 @@ -44,7 +44,9 @@ import java.util.concurrent.atomic.AtomicLong; import java.util.function.Function; import static java.lang.String.format; +import static org.apache.aries.jax.rs.whiteboard.internal.AriesJaxRSServiceRuntime.getApplicationName; import static org.apache.aries.jax.rs.whiteboard.internal.Utils.deployRegistrator; +import static org.apache.aries.jax.rs.whiteboard.internal.Utils.getProperties; import static org.apache.aries.jax.rs.whiteboard.internal.Utils.highestPer; import static org.apache.aries.jax.rs.whiteboard.internal.Utils.onlyGettables; import static org.apache.aries.jax.rs.whiteboard.internal.Utils.safeRegisterEndpoint; @@ -75,7 +77,8 @@ import static org.osgi.service.jaxrs.whiteboard.JaxRSWhiteboardConstants.JAX_RS_ */ public class Whiteboard { - public static final Function<ServiceTuple<Application>, String> APPLICATION_BASE = ((Function<ServiceTuple<Application>, ServiceReference<Application>>) ServiceTuple::getServiceReference).andThen(Whiteboard::getApplicationBase); + public static final Function<ServiceTuple<Application>, String> APPLICATION_BASE = ((Function<ServiceTuple<Application>, ServiceReference<Application>>) ServiceTuple::getServiceReference).andThen(Utils::getProperties).andThen(Whiteboard::getApplicationBase); + public static final String DEFAULT_NAME = ".default"; public static OSGi<Void> createWhiteboard(Dictionary<String, ?> configuration) { AriesJaxRSServiceRuntime runtime = new AriesJaxRSServiceRuntime(); @@ -84,15 +87,15 @@ public class Whiteboard { return bundleContext().flatMap(bundleContext -> - registerJaxRSServiceRuntime(runtime, bundleContext, configurationMap).flatMap(runtimeResgistration -> - createDefaultJaxRsServiceRegistrator(configurationMap).flatMap(defaultServiceRegistrator -> - just(new ServiceRegistrationChangeCounter(runtimeResgistration)).flatMap(counter -> - just(runtimeResgistration.getReference()).flatMap(runtimeRegistration -> + registerJaxRSServiceRuntime(runtime, bundleContext, configurationMap).flatMap(runtimeRegistration -> + createDefaultJaxRsServiceRegistrator(configurationMap, runtime).flatMap(defaultServiceRegistrator -> + just(new ServiceRegistrationChangeCounter(runtimeRegistration)).flatMap(counter -> + just(runtimeRegistration.getReference()).flatMap(runtimeReference -> all( - countChanges(whiteboardApplications(runtimeRegistration, runtime, Maps.from(configuration)), counter), - countChanges(whiteBoardApplicationSingletons(runtimeRegistration, runtime), counter), - countChanges(whiteboardExtensions(runtimeRegistration, defaultServiceRegistrator, runtime), counter), - countChanges(whiteboardSingletons(runtimeRegistration, defaultServiceRegistrator, runtime), counter) + countChanges(whiteboardApplications(runtimeReference, runtime, Maps.from(configuration)), counter), + countChanges(whiteBoardApplicationSingletons(runtimeReference, runtime), counter), + countChanges(whiteboardExtensions(runtimeReference, defaultServiceRegistrator, runtime), counter), + countChanges(whiteboardSingletons(runtimeReference, defaultServiceRegistrator, runtime), counter) )))))); } @@ -147,18 +150,22 @@ public class Whiteboard { } private static OSGi<CXFJaxRsServiceRegistrator> - createDefaultJaxRsServiceRegistrator(Map<String, ?> configuration) { + createDefaultJaxRsServiceRegistrator( + Map<String, ?> configuration, AriesJaxRSServiceRuntime runtime) { Map<String, Object> properties = new HashMap<>(configuration); properties.put(JAX_RS_NAME, ".default"); + properties.put(JAX_RS_APPLICATION_BASE, "/"); + properties.put("service.id", (long)-1); return bundleContext().flatMap(bundleContext -> just(createBus(bundleContext, configuration)).flatMap(bus -> - registerCXFServletService(bus, "", configuration).then( - just( - new CXFJaxRsServiceRegistrator(bus, new DefaultApplication())) - ))); + registerCXFServletService(bus, "", configuration).foreach( + __ -> runtime.setApplicationForPath("/", properties), + __ -> runtime.unsetApplicationForPath("/")).then( + just(new CXFJaxRsServiceRegistrator(bus, new DefaultApplication())) + ))); } private static String getApplicationFilter() { @@ -237,7 +244,7 @@ public class Whiteboard { CXFJaxRsServiceRegistrator.class, applicationFilter). flatMap(registratorReference -> just( - AriesJaxRSServiceRuntime.getApplicationName(registratorReference)). + getApplicationName(getProperties(registratorReference))). flatMap(applicationName -> waitForExtensionDependencies(ref, service(registratorReference).flatMap(registrator -> @@ -267,12 +274,13 @@ public class Whiteboard { bundleContext -> highestRankedPerPath.flatMap( ref -> deployApplication(configuration, bundleContext, ref) ).map( - ServiceTuple::getServiceReference). - foreach( - sr -> runtime.setApplicationForPath( - getApplicationBase(sr), sr), - sr -> runtime.unsetApplicationForPath( - getApplicationBase(sr)) + ServiceTuple::getServiceReference + ).map( + Utils::getProperties + ).foreach( + p -> runtime.setApplicationForPath( + getApplicationBase(p), p), + p -> runtime.unsetApplicationForPath(getApplicationBase(p)) ) ); } @@ -286,20 +294,18 @@ public class Whiteboard { ServiceReference<Application> serviceReference = tuple.getServiceReference(); - Map<String, Object> properties = - CXFJaxRsServiceRegistrator.getProperties( - serviceReference, JAX_RS_APPLICATION_BASE); + Map<String, Object> properties = getProperties(serviceReference); properties.computeIfAbsent( JAX_RS_NAME, (__) -> AriesJaxRSServiceRuntime.generateApplicationName( - tuple.getServiceReference())); + properties)); return all( deployRegistrator(bus, tuple.getService(), properties), registerCXFServletService( - bus, getApplicationBase(serviceReference), properties)). + bus, getApplicationBase(properties), properties)). then( just(tuple) ); @@ -310,10 +316,8 @@ public class Whiteboard { ServiceReference<?> jaxRsRuntimeServiceReference) { return - serviceReferences( - Application.class, getApplicationFilter()). - filter( - new TargetFilter<>(jaxRsRuntimeServiceReference)); + serviceReferences(Application.class, getApplicationFilter()). + filter(new TargetFilter<>(jaxRsRuntimeServiceReference)); } private static OSGi<?> whiteboardExtensions( @@ -327,7 +331,10 @@ public class Whiteboard { flatMap(ref -> waitForExtensionDependencies(ref, safeRegisterExtension( - ref, ".default", defaultServiceRegistrator, runtime) + ref, DEFAULT_NAME, defaultServiceRegistrator, runtime) + ).foreach( + __ -> runtime.addApplicationExtension(DEFAULT_NAME, ref), + __ -> runtime.removeApplicationExtension(DEFAULT_NAME, ref) ) ); } @@ -340,11 +347,15 @@ public class Whiteboard { return serviceReferences(getSingletonsFilter()). filter(new TargetFilter<>(jaxRsRuntimeServiceReference)). - flatMap(serviceReference -> - waitForExtensionDependencies(serviceReference, + flatMap(ref -> + waitForExtensionDependencies( + ref, safeRegisterEndpoint( - serviceReference, ".default", defaultServiceRegistrator, + ref, DEFAULT_NAME, defaultServiceRegistrator, runtime) + ).foreach( + __ -> runtime.addApplicationEndpoint(DEFAULT_NAME, ref), + __ -> runtime.removeApplicationExtension(DEFAULT_NAME, ref) ) ); } @@ -428,9 +439,9 @@ public class Whiteboard { } public static String getApplicationBase( - ServiceReference<Application> serviceReference) { + Map<String, Object> properties) { - return serviceReference.getProperty(JAX_RS_APPLICATION_BASE).toString(); + return properties.get(JAX_RS_APPLICATION_BASE).toString(); }
