You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by ti...@apache.org on 2018/02/05 19:15:38 UTC

aries-jax-rs-whiteboard git commit: Make sure that features are only added once when they advertise multiple interfaces

Repository: aries-jax-rs-whiteboard
Updated Branches:
  refs/heads/master c62794dfa -> 784bf93f2


Make sure that features are only added once when they advertise multiple interfaces


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

Branch: refs/heads/master
Commit: 784bf93f218cbc36c782c92fb25f9dfcb01de985
Parents: c62794d
Author: Tim Ward <ti...@apache.org>
Authored: Mon Feb 5 19:14:21 2018 +0000
Committer: Tim Ward <ti...@apache.org>
Committed: Mon Feb 5 19:14:21 2018 +0000

----------------------------------------------------------------------
 .../internal/AriesJaxrsServiceRuntime.java      |  2 +-
 .../internal/CxfJaxrsServiceRegistrator.java    | 39 +++++++-------------
 .../jax/rs/whiteboard/internal/Whiteboard.java  | 35 +++++++++---------
 3 files changed, 31 insertions(+), 45 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/784bf93f/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 af06485..a54accd 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
@@ -452,7 +452,7 @@ public class AriesJaxrsServiceRuntime implements JaxrsServiceRuntime {
             Arrays.stream(
                 canonicalize(serviceReference.getProperty("objectClass"))).
             filter(
-                SUPPORTED_EXTENSION_INTERFACES::contains
+                SUPPORTED_EXTENSION_INTERFACES::containsKey
             ).
             toArray(String[]::new);
     }

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/784bf93f/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 6318904..098f93b 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
@@ -17,6 +17,10 @@
 
 package org.apache.aries.jax.rs.whiteboard.internal;
 
+import static java.util.stream.Collectors.toMap;
+import static org.apache.aries.jax.rs.whiteboard.internal.Utils.canonicalize;
+import static org.apache.aries.jax.rs.whiteboard.internal.Whiteboard.SUPPORTED_EXTENSION_INTERFACES;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -26,8 +30,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.TreeSet;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 import javax.ws.rs.RuntimeType;
 import javax.ws.rs.core.Application;
@@ -52,8 +54,6 @@ import org.apache.cxf.jaxrs.provider.ServerConfigurableFactory;
 import org.apache.cxf.message.Message;
 import org.osgi.framework.ServiceReference;
 
-import static org.apache.aries.jax.rs.whiteboard.internal.Utils.canonicalize;
-
 public class CxfJaxrsServiceRegistrator {
 
     public CxfJaxrsServiceRegistrator(
@@ -253,38 +253,25 @@ public class CxfJaxrsServiceRegistrator {
 
                     int ranking = Utils.getRanking(cachingServiceReference);
 
-                    String[] interfaces = canonicalize(
-                        serviceReference.getProperty("objectClass"));
+                    Class<?>[] interfaces = Arrays.stream(canonicalize(
+                        serviceReference.getProperty("objectClass")))
+                            .filter(SUPPORTED_EXTENSION_INTERFACES::containsKey)
+                            .map(SUPPORTED_EXTENSION_INTERFACES::get)
+                            .toArray(Class[]::new);
 
                     if (ranking != 0) {
                         Map<Class<?>, Integer> classesWithPriorities=
-                            Arrays.stream(interfaces).flatMap(
-                                className -> {
-                                    try {
-                                        return Stream.of(
-                                            Class.forName(className));
-                                    }
-                                    catch (ClassNotFoundException e) {
-                                        return Stream.empty();
-                                    }
-                                }
-                            ).collect(
-                                Collectors.toMap(c -> c, __ -> ranking)
+                            Arrays.stream(interfaces).collect(
+                                toMap(c -> c, __ -> ranking)
                             );
 
                         featureContext.register(
                             provider.getService(), classesWithPriorities);
                     }
                     else {
-                        for (String className : interfaces) {
-                            try {
-                                featureContext.register(
+                        featureContext.register(
                                     provider.getService(),
-                                    Class.forName(className));
-                            }
-                            catch (ClassNotFoundException e) {
-                            }
-                        }
+                                    interfaces);
                     }
 
                 }

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/784bf93f/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 6355a2b..0b3e122 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
@@ -51,11 +51,9 @@ import javax.ws.rs.ext.ReaderInterceptor;
 import javax.ws.rs.ext.WriterInterceptor;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.Dictionary;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
@@ -64,8 +62,10 @@ import java.util.concurrent.atomic.AtomicLong;
 import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.function.Supplier;
+import java.util.stream.Stream;
 
 import static java.lang.String.format;
+import static java.util.stream.Collectors.toMap;
 import static org.apache.aries.jax.rs.whiteboard.internal.AriesJaxrsServiceRuntime.getApplicationName;
 import static org.apache.aries.jax.rs.whiteboard.internal.Utils.canonicalize;
 import static org.apache.aries.jax.rs.whiteboard.internal.Utils.generateApplicationName;
@@ -105,21 +105,20 @@ import static org.osgi.service.jaxrs.whiteboard.JaxrsWhiteboardConstants.JAX_RS_
  */
 public class Whiteboard {
 
-    static final Collection<String> SUPPORTED_EXTENSION_INTERFACES =
-        Collections.unmodifiableSet(
-            new HashSet<>(Arrays.asList(
-                ContainerRequestFilter.class.getName(),
-                ContainerResponseFilter.class.getName(),
-                ReaderInterceptor.class.getName(),
-                WriterInterceptor.class.getName(),
-                MessageBodyReader.class.getName(),
-                MessageBodyWriter.class.getName(),
-                ContextResolver.class.getName(),
-                ExceptionMapper.class.getName(),
-                ParamConverterProvider.class.getName(),
-                Feature.class.getName(),
-                DynamicFeature.class.getName()
-        )));
+    static final Map<String, Class<?>> SUPPORTED_EXTENSION_INTERFACES =
+        Collections.unmodifiableMap(
+            Stream.of(ContainerRequestFilter.class,
+                ContainerResponseFilter.class,
+                ReaderInterceptor.class,
+                WriterInterceptor.class,
+                MessageBodyReader.class,
+                MessageBodyWriter.class,
+                ContextResolver.class,
+                ExceptionMapper.class,
+                ParamConverterProvider.class,
+                Feature.class,
+                DynamicFeature.class)
+            .collect(toMap(Class::getName, Function.identity())));
     static final String DEFAULT_NAME = ".default";
     private static final Function<CachingServiceReference<Application>, String>
         APPLICATION_BASE = sr -> getApplicationBase(sr::getProperty);
@@ -790,7 +789,7 @@ public class Whiteboard {
             "objectClass"));
 
         return Arrays.stream(objectClasses).
-            anyMatch(SUPPORTED_EXTENSION_INTERFACES::contains);
+            anyMatch(SUPPORTED_EXTENSION_INTERFACES::containsKey);
     }
 
     private interface ChangeCounter {