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 2019/12/10 18:19:12 UTC

[aries-jax-rs-whiteboard] branch master updated: [ARIES-1962] Proper registration order

This is an automated email from the ASF dual-hosted git repository.

csierra pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/aries-jax-rs-whiteboard.git


The following commit(s) were added to refs/heads/master by this push:
     new f0417ba  [ARIES-1962] Proper registration order
f0417ba is described below

commit f0417bac76884602f9b1d0607cfe7313011e468e
Author: Carlos Sierra Andrés <ca...@liferay.com>
AuthorDate: Tue Dec 10 19:18:24 2019 +0100

    [ARIES-1962] Proper registration order
---
 jax-rs.itests/src/main/java/test/JaxrsTest.java    | 72 ++++++++++++++++++++++
 .../internal/ServiceReferenceRegistry.java         |  4 +-
 2 files changed, 74 insertions(+), 2 deletions(-)

diff --git a/jax-rs.itests/src/main/java/test/JaxrsTest.java b/jax-rs.itests/src/main/java/test/JaxrsTest.java
index 8a147fa..288e3be 100644
--- a/jax-rs.itests/src/main/java/test/JaxrsTest.java
+++ b/jax-rs.itests/src/main/java/test/JaxrsTest.java
@@ -2379,6 +2379,78 @@ public class JaxrsTest extends TestHelper {
     }
 
     @Test
+    public void testStandaloneEndpointWithExtensionsDependenciesOnlyOneService()
+            throws InterruptedException {
+
+        WebTarget webTarget = createDefaultTarget().path("test");
+
+        JaxrsServiceRuntime runtime = getJaxrsServiceRuntime();
+
+        ServiceRegistration<?> serviceRegistration;
+        ServiceRegistration<?> extensionRegistration1;
+
+        serviceRegistration = registerAddon(
+                new TestAddon(),
+                JAX_RS_EXTENSION_SELECT, new String[]{
+                        "(property one=one)",
+                        "(property two=two)",
+                });
+
+        RuntimeDTO runtimeDTO = runtime.getRuntimeDTO();
+
+        assertEquals(1, runtimeDTO.failedResourceDTOs.length);
+        assertEquals(
+                (long)serviceRegistration.getReference().getProperty(
+                        "service.id"),
+                runtimeDTO.failedResourceDTOs[0].serviceId);
+
+        assertEquals(404, webTarget.request().get().getStatus());
+
+        extensionRegistration1 = registerExtension(
+                "aExtension", "property one", "one", "property two", "two");
+
+        runtimeDTO = runtime.getRuntimeDTO();
+
+        assertEquals(0, runtimeDTO.failedResourceDTOs.length);
+
+        Response response = webTarget.request().get();
+
+        assertEquals(
+                "This should say hello", "Hello test",
+                response.readEntity(String.class));
+
+        extensionRegistration1.unregister();
+
+        runtimeDTO = runtime.getRuntimeDTO();
+        assertEquals(1, runtimeDTO.failedResourceDTOs.length);
+        assertEquals(
+                (long)serviceRegistration.getReference().getProperty(
+                        "service.id"),
+                runtimeDTO.failedResourceDTOs[0].serviceId);
+
+        assertEquals(404, webTarget.request().get().getStatus());
+
+        extensionRegistration1 = registerExtension(
+                "aExtension", "property one", "one", "property two", "two");
+
+        runtimeDTO = runtime.getRuntimeDTO();
+        assertEquals(0, runtimeDTO.failedResourceDTOs.length);
+
+        assertEquals(
+                "This should say hello", "Hello test",
+                response.readEntity(String.class));
+
+        extensionRegistration1.unregister();
+
+        runtimeDTO = runtime.getRuntimeDTO();
+        assertEquals(1, runtimeDTO.failedResourceDTOs.length);
+        assertEquals(
+                (long)serviceRegistration.getReference().getProperty(
+                        "service.id"),
+                runtimeDTO.failedResourceDTOs[0].serviceId);
+    }
+
+    @Test
     public void testStandaloneFilter() throws InterruptedException {
         WebTarget webTarget = createDefaultTarget().path("test");
 
diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/ServiceReferenceRegistry.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/ServiceReferenceRegistry.java
index 32b37e8..bf64f4d 100644
--- a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/ServiceReferenceRegistry.java
+++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/ServiceReferenceRegistry.java
@@ -85,13 +85,13 @@ public class ServiceReferenceRegistry implements AutoCloseable {
 
     public void register(CachingServiceReference<?> serviceReference) {
         synchronized (ServiceReferenceRegistry.this) {
+            _registeredExtensions.add(serviceReference);
+
             for (ServiceReferenceFilteredPublisher publisher :
                 new HashSet<>(_extensionPublishers)) {
 
                 publisher.publishIfMatched(serviceReference);
             }
-
-            _registeredExtensions.add(serviceReference);
         }
     }