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 2017/09/04 13:52:18 UTC

[1/4] aries-jax-rs-whiteboard git commit: RepeatInOrder not needed

Repository: aries-jax-rs-whiteboard
Updated Branches:
  refs/heads/master d5bdc7673 -> 2cf7f7f0e


RepeatInOrder not needed

Also code reorganization to make it more consistent


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

Branch: refs/heads/master
Commit: 638ebef6010e7058b8353a195d124b6cfab401d7
Parents: d5bdc76
Author: Carlos Sierra <cs...@apache.org>
Authored: Mon Sep 4 12:35:30 2017 +0200
Committer: Carlos Sierra <cs...@apache.org>
Committed: Mon Sep 4 12:35:30 2017 +0200

----------------------------------------------------------------------
 .../aries/jax/rs/whiteboard/internal/Utils.java | 256 +++++++++++--------
 1 file changed, 152 insertions(+), 104 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/638ebef6/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 c39fa82..1e5d15a 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
@@ -26,8 +26,8 @@ import org.osgi.framework.ServiceReference;
 
 import java.util.Comparator;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.Map;
-import java.util.SortedSet;
 import java.util.TreeSet;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.Consumer;
@@ -73,7 +73,8 @@ public class Utils {
     public static <T> ResourceProvider getResourceProvider(
         ServiceObjects<T> serviceObjects) {
 
-        ServiceReference<T> serviceReference = serviceObjects.getServiceReference();
+        ServiceReference<T> serviceReference =
+            serviceObjects.getServiceReference();
 
         return new ComparableResourceProvider(serviceReference, serviceObjects);
     }
@@ -82,85 +83,9 @@ public class Utils {
         Function<T, K> keySupplier, OSGi<T> program,
         Consumer<T> onAddingShadowed, Consumer<T> onRemovedShadowed) {
 
-        ConcurrentHashMap<K, TreeSet<Event<T>>> map = new ConcurrentHashMap<>();
-
         return program.route(
-            router -> {
-                router.onIncoming(e -> {
-                    K key = keySupplier.apply(e.getContent());
-
-                    Comparator<Event<T>> comparator = Comparator.comparing(
-                        Event::getContent);
-
-                    map.compute(
-                        key,
-                        (__, set) -> {
-                            if (set == null) {
-                                set = new TreeSet<>(comparator);
-                            }
-
-                            Event<T> last = set.size() > 0 ? set.last() : null;
-
-                            boolean higher =
-                                (last == null) ||
-                                (comparator.compare(e, last) > 0);
-
-                            if (higher) {
-                                if (last != null) {
-                                    router.signalLeave(last);
-
-                                    onAddingShadowed.accept(last.getContent());
-                                }
-
-                                router.signalAdd(e);
-                            }
-                            else {
-                                onAddingShadowed.accept(e.getContent());
-                            }
-
-                            set.add(e);
-
-                            return set;
-                        });
-                });
-                router.onLeaving(e -> {
-                    T content = e.getContent();
-
-                    K key = keySupplier.apply(content);
-
-                    map.compute(
-                        key,
-                        (__, set) -> {
-                            if (set.isEmpty()) {
-                                return set;
-                            }
-
-                            Event<T> last = set.last();
-
-                            if (content.equals(last.getContent())) {
-                                router.signalLeave(e);
-
-                                Event<T> penultimate = set.lower(last);
-
-                                if (penultimate != null) {
-                                    router.signalAdd(penultimate);
-
-                                    onRemovedShadowed.accept(
-                                        penultimate.getContent());
-                                }
-                            }
-                            else {
-                                onRemovedShadowed.accept(content);
-                            }
-
-                            set.removeIf(t -> t.getContent().equals(content));
-
-                            return set;
-                        }
-                    );
-                });
-            }
-        );
+            new HighestPerRouter<>(
+                keySupplier, onAddingShadowed, onRemovedShadowed));
     }
 
     public static <T> OSGi<ServiceTuple<T>> onlyGettables(
@@ -200,7 +125,7 @@ public class Utils {
     public static <T extends Comparable<? super T>> OSGi<T> repeatInOrder(
         OSGi<T> program) {
 
-        return program.route(new RepeatInOrderRouter<>());
+        return program.route(new HighestRankedRouter<>());
     }
 
     public static <T> OSGi<T> service(ServiceReference<T> serviceReference) {
@@ -303,16 +228,11 @@ public class Utils {
 
         public ServiceReference<T> getServiceReference() {
             return _serviceReference;
-        }        @Override
-        public int compareTo(ServiceTuple<T> o) {
-            return _serviceReference.compareTo(o._serviceReference);
         }
-
         @Override
         public int hashCode() {
             return _serviceReference.hashCode();
         }
-
         @Override
         public boolean equals(Object o) {
             if (this == o) return true;
@@ -321,50 +241,178 @@ public class Utils {
             ServiceTuple<?> that = (ServiceTuple<?>) o;
 
             return _serviceReference.equals(that._serviceReference);
+        }@Override
+        public int compareTo(ServiceTuple<T> o) {
+            return _serviceReference.compareTo(o._serviceReference);
         }
 
 
 
     }
 
-    private static class RepeatInOrderRouter<T extends Comparable<? super T>>
+    private static class HighestRankedRouter<T extends Comparable<? super T>>
         implements Consumer<OSGi.Router<T>> {
 
-        private final TreeSet<Event<T>> _treeSet;
+        private final TreeSet<Event<T>> _set;
+        private final Comparator<Event<T>> _comparator;
 
-        public RepeatInOrderRouter() {
-            Comparator<Event<T>> comparing = Comparator.comparing(
-                Event::getContent);
+        public HighestRankedRouter() {
+            _comparator = Comparator.comparing(Event::getContent);
 
-            _treeSet = new TreeSet<>(comparing.reversed());
+            _set = new TreeSet<>(_comparator);
         }
 
         @Override
         public void accept(OSGi.Router<T> router) {
             router.onIncoming(ev -> {
-                _treeSet.add(ev);
+                synchronized (_set) {
+                    Event<T> last = _set.size() > 0 ? _set.last() : null;
+
+                    boolean higher =
+                        (last == null) ||
+                            (_comparator.compare(ev, last) > 0);
 
-                SortedSet<Event<T>> events = _treeSet.tailSet(ev, false);
-                events.forEach(router::signalLeave);
+                    if (higher) {
+                        if (last != null) {
+                            router.signalLeave(last);
+                        }
 
-                router.signalAdd(ev);
+                        router.signalAdd(ev);
+                    }
 
-                events.forEach(router::signalAdd);
+                    _set.add(ev);
+                }
             });
             router.onLeaving(ev -> {
-                _treeSet.remove(ev);
+                synchronized (_set) {
+                    if (_set.isEmpty()) {
+                        return;
+                    }
+
+                    T content = ev.getContent();
 
-                SortedSet<Event<T>> events = _treeSet.tailSet(ev, false);
-                events.forEach(router::signalLeave);
+                    Event<T> last = _set.last();
 
-                router.signalLeave(ev);
+                    if (content.equals(last.getContent())) {
+                        router.signalLeave(ev);
 
-                events.forEach(router::signalAdd);
+                        Event<T> penultimate = _set.lower(ev);
+
+                        if (penultimate != null) {
+                            router.signalAdd(penultimate);
+                        }
+                    }
+
+                    _set.removeIf(t -> content.equals(t.getContent()));
+                }
             });
             router.onClose(() -> {
-                _treeSet.forEach(router::signalLeave);
+                synchronized (_set) {
+                    Iterator<Event<T>> iterator = _set.descendingIterator();
+
+                    while (iterator.hasNext()) {
+                        Event<T> event = iterator.next();
+
+                        router.signalLeave(event);
+
+                        iterator.remove();
+                    }
+                }
+            });
+        }
+
+    }
+
+    private static class HighestPerRouter<T extends Comparable<? super T>, K>
+        implements Consumer<OSGi.Router<T>> {
+
+        private final Function<T, K> _keySupplier;
+        private final ConcurrentHashMap<K, TreeSet<Event<T>>> _map =
+            new ConcurrentHashMap<>();
+        private final Consumer<T> _onAddingShadowed;
+        private final Consumer<T> _onRemovedShadowed;
+
+        public HighestPerRouter(
+            Function<T, K> keySupplier,
+            Consumer<T> onAddingShadowed, Consumer<T> onRemovedShadowed) {
+
+            _keySupplier = keySupplier;
+            _onAddingShadowed = onAddingShadowed;
+            _onRemovedShadowed = onRemovedShadowed;
+        }
+
+        @Override
+        public void accept(OSGi.Router<T> router) {
+            router.onIncoming(e -> {
+                K key = _keySupplier.apply(e.getContent());
+
+                Comparator<Event<T>> comparator = Comparator.comparing(
+                    Event::getContent);
+
+                _map.compute(
+                    key,
+                    (__, set) -> {
+                        if (set == null) {
+                            set = new TreeSet<>(comparator);
+                        }
+
+                        Event<T> last = set.size() > 0 ? set.last() : null;
+
+                        boolean higher =
+                            (last == null) ||
+                                (comparator.compare(e, last) > 0);
+
+                        if (higher) {
+                            if (last != null) {
+                                router.signalLeave(last);
+
+                                _onAddingShadowed.accept(last.getContent());
+                            }
+
+                            router.signalAdd(e);
+                        } else {
+                            _onAddingShadowed.accept(e.getContent());
+                        }
+
+                        set.add(e);
+
+                        return set;
+                    });
+            });
+            router.onLeaving(e -> {
+                T content = e.getContent();
+
+                K key = _keySupplier.apply(content);
+
+                _map.compute(
+                    key,
+                    (__, set) -> {
+                        if (set.isEmpty()) {
+                            return set;
+                        }
+
+                        Event<T> last = set.last();
+
+                        if (content.equals(last.getContent())) {
+                            router.signalLeave(e);
+
+                            Event<T> penultimate = set.lower(last);
+
+                            if (penultimate != null) {
+                                router.signalAdd(penultimate);
+
+                                _onRemovedShadowed.accept(
+                                    penultimate.getContent());
+                            }
+                        } else {
+                            _onRemovedShadowed.accept(content);
+                        }
+
+                        set.removeIf(t -> t.getContent().equals(content));
 
-                _treeSet.clear();
+                        return set;
+                    }
+                );
             });
         }
 


[4/4] aries-jax-rs-whiteboard git commit: Satisfy Find Security Bugs

Posted by cs...@apache.org.
Satisfy Find Security Bugs


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

Branch: refs/heads/master
Commit: 2cf7f7f0e05fc52d99258d5092b7c5b1ee927f99
Parents: e6fa583
Author: Carlos Sierra <cs...@apache.org>
Authored: Mon Sep 4 13:47:07 2017 +0200
Committer: Carlos Sierra <cs...@apache.org>
Committed: Mon Sep 4 14:05:11 2017 +0200

----------------------------------------------------------------------
 .../internal/AriesJaxRSServiceRuntime.java      |  42 +++---
 .../internal/CXFJaxRsServiceRegistrator.java    |  47 ++++---
 .../jax/rs/whiteboard/internal/Strings.java     |  44 ------
 .../aries/jax/rs/whiteboard/internal/Utils.java |  46 ++++---
 .../jax/rs/whiteboard/internal/Whiteboard.java  | 138 +++++++++----------
 5 files changed, 144 insertions(+), 173 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/2cf7f7f0/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 a3c53c9..c44773f 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
@@ -30,6 +30,8 @@ import org.osgi.service.jaxrs.runtime.dto.RequestInfoDTO;
 import org.osgi.service.jaxrs.runtime.dto.ResourceDTO;
 import org.osgi.service.jaxrs.runtime.dto.RuntimeDTO;
 import org.osgi.service.jaxrs.whiteboard.JaxRSWhiteboardConstants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.ws.rs.core.Application;
 import java.util.ArrayList;
@@ -56,42 +58,32 @@ import static org.osgi.service.jaxrs.whiteboard.JaxRSWhiteboardConstants.JAX_RS_
 public class AriesJaxRSServiceRuntime implements JaxRSServiceRuntime {
 
     private static final long serialVersionUID = 1L;
-
+    private static final Logger _LOGGER = LoggerFactory.getLogger(
+        Whiteboard.class);
     private ConcurrentHashMap<String, Map<String, Object>>
         _applications = new ConcurrentHashMap<>();
-
     private ConcurrentHashMap<String, Collection<ServiceReference<?>>>
         _applicationEndpoints = new ConcurrentHashMap<>();
-
     private ConcurrentHashMap<String, Collection<ServiceReference<?>>>
         _applicationExtensions = new ConcurrentHashMap<>();
-
     private Collection<ServiceReference<Application>>
         _ungettableApplications = new CopyOnWriteArrayList<>();
-
     private Collection<ServiceReference<Application>> _shadowedApplications =
         new CopyOnWriteArrayList<>();
-
     private Set<ServiceReference<Application>> _dependentApplications =
         ConcurrentHashMap.newKeySet();
-
     private Collection<ServiceReference<Application>> _clashingApplications =
         new CopyOnWriteArrayList<>();
-
     private Collection<ServiceReference<Application>> _erroredApplications =
         new CopyOnWriteArrayList<>();
-
     private Collection<ServiceReference<?>> _ungettableEndpoints =
         new CopyOnWriteArrayList<>();
     private Collection<ServiceReference<?>> _ungettableExtensions =
         new CopyOnWriteArrayList<>();
-
     private Set<ServiceReference<?>> _dependentServices =
         ConcurrentHashMap.newKeySet();
-
     private Collection<ServiceReference<?>> _invalidExtensions =
         new CopyOnWriteArrayList<>();
-
     private volatile Map<String, Object> _defaultApplicationProperties;
 
     public void addApplicationEndpoint(
@@ -138,18 +130,36 @@ public class AriesJaxRSServiceRuntime implements JaxRSServiceRuntime {
     public boolean addNotGettableApplication(
         ServiceReference<Application> serviceReference) {
 
+        if (_LOGGER.isWarnEnabled()) {
+            _LOGGER.warn(
+                "Application from reference " + serviceReference +
+                    " can't be got");
+        }
+
         return _ungettableApplications.add(serviceReference);
     }
 
     public <T> boolean addNotGettableEndpoint(
         ServiceReference<T> serviceReference) {
 
+        if (_LOGGER.isWarnEnabled()) {
+            _LOGGER.warn(
+                "Resource from reference " + serviceReference +
+                    " can't be got");
+        }
+
         return _ungettableEndpoints.add(serviceReference);
     }
 
     public <T> void addNotGettableExtension(
         ServiceReference<T> serviceReference) {
 
+        if (_LOGGER.isWarnEnabled()) {
+            _LOGGER.warn(
+                "Extension from reference " + serviceReference +
+                    " can't be got");
+        }
+
         _ungettableExtensions.add(serviceReference);
     }
 
@@ -296,14 +306,6 @@ public class AriesJaxRSServiceRuntime implements JaxRSServiceRuntime {
             });
     }
 
-    /*public void setDefaultApplication(Map<String, Object> properties) {
-        _applications.compute(DEFAULT_NAME, (__, ___) -> {
-            _defaultApplicationProperties = properties;
-
-            return properties;
-        });
-    }*/
-
     public Map<String, Object> unsetApplicationForPath(String path) {
         return _applications.remove(path);
     }

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/2cf7f7f0/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 e06a907..d73e1ee 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,12 +20,13 @@ package org.apache.aries.jax.rs.whiteboard.internal;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Comparator;
 import java.util.stream.Stream;
 
 import javax.ws.rs.core.Application;
 import javax.ws.rs.core.Feature;
 
-import org.apache.aries.jax.rs.whiteboard.internal.Utils.ComparableResourceProvider;
+import org.apache.aries.jax.rs.whiteboard.internal.Utils.ServiceReferenceResourceProvider;
 import org.apache.aries.jax.rs.whiteboard.internal.Utils.ServiceTuple;
 import org.apache.cxf.Bus;
 import org.apache.cxf.endpoint.Server;
@@ -43,12 +44,12 @@ import static org.apache.aries.jax.rs.whiteboard.internal.Utils.canonicalize;
 
 public class CXFJaxRsServiceRegistrator {
 
-    private volatile boolean _closed = false;
     private final Application _application;
     private final Bus _bus;
     private final Collection<ServiceTuple<?>> _providers = new ArrayList<>();
-    private Server _server;
     private final Collection<ResourceProvider> _services = new ArrayList<>();
+    private volatile boolean _closed = false;
+    private Server _server;
 
     public CXFJaxRsServiceRegistrator(Bus bus, Application application) {
         _bus = bus;
@@ -89,6 +90,16 @@ public class CXFJaxRsServiceRegistrator {
         _closed = true;
     }
 
+    public <T> T createEndpoint(Application app, Class<T> endpointType) {
+        JAXRSServerFactoryBean bean = ResourceUtils.createApplication(app, false);
+        if (JAXRSServerFactoryBean.class.isAssignableFrom(endpointType)) {
+            return endpointType.cast(bean);
+        }
+        bean.setStart(false);
+        Server server = bean.create();
+        return endpointType.cast(server);
+    }
+
     public void remove(ResourceProvider resourceProvider) {
         if (_closed) {
             return;
@@ -112,6 +123,13 @@ public class CXFJaxRsServiceRegistrator {
     private static class ComparableResourceComparator
         implements ResourceComparator {
 
+        private static Comparator<ServiceReferenceResourceProvider> comparator;
+
+        static {
+            comparator = Comparator.comparing(
+                ServiceReferenceResourceProvider::getServiceReference);
+        }
+
         @Override
         public int compare(
             ClassResourceInfo cri1, ClassResourceInfo cri2, Message message) {
@@ -119,18 +137,19 @@ public class CXFJaxRsServiceRegistrator {
             ResourceProvider rp1 = cri1.getResourceProvider();
             ResourceProvider rp2 = cri2.getResourceProvider();
 
-            if (rp1 instanceof ComparableResourceProvider &&
-                rp2 instanceof ComparableResourceProvider) {
+            if (rp1 instanceof ServiceReferenceResourceProvider &&
+                rp2 instanceof ServiceReferenceResourceProvider) {
 
-                return -((ComparableResourceProvider) rp1).compareTo(
-                    (ComparableResourceProvider) rp2);
+                return comparator.compare(
+                    (ServiceReferenceResourceProvider)rp2,
+                    (ServiceReferenceResourceProvider)rp1);
             }
 
-            if (rp1 instanceof ComparableResourceProvider) {
+            if (rp1 instanceof ServiceReferenceResourceProvider) {
                 return 1;
             }
 
-            if (rp2 instanceof ComparableResourceProvider) {
+            if (rp2 instanceof ServiceReferenceResourceProvider) {
                 return -1;
             }
 
@@ -213,14 +232,4 @@ public class CXFJaxRsServiceRegistrator {
         _server.start();
     }
 
-    public <T> T createEndpoint(Application app, Class<T> endpointType) {
-        JAXRSServerFactoryBean bean = ResourceUtils.createApplication(app, false);
-        if (JAXRSServerFactoryBean.class.isAssignableFrom(endpointType)) {
-            return endpointType.cast(bean);
-        }
-        bean.setStart(false);
-        Server server = bean.create();
-        return endpointType.cast(server);
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/2cf7f7f0/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Strings.java
----------------------------------------------------------------------
diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Strings.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Strings.java
deleted file mode 100644
index 7fc2ac5..0000000
--- a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Strings.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.apache.aries.jax.rs.whiteboard.internal;
-
-import java.lang.reflect.ParameterizedType;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Optional;
-
-public class Strings {
-
-    @SuppressWarnings({"unchecked" })
-    public static Optional<List<String>> stringPlus(Object obj) {
-        if (obj == null) {
-            return Optional.empty();
-        }
-
-        List<String> strings = new ArrayList<>();
-
-        if (obj instanceof String) {
-            strings.add((String)obj);
-        }
-        else if (Collection.class.isInstance(obj) &&
-                (ParameterizedType.class.isAssignableFrom(obj.getClass())) &&
-                ((ParameterizedType)obj).getActualTypeArguments()[0].equals(String.class)) {
-
-            for (String item : (Collection<String>)obj) {
-                strings.add(item);
-            }
-        }
-        else if (obj.getClass().isArray() &&
-                String.class.isAssignableFrom(obj.getClass().getComponentType())) {
-
-            for (String item : (String[])obj) {
-                strings.add(item);
-            }
-        }
-        else {
-            return Optional.empty();
-        }
-
-        return Optional.of(strings);
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/2cf7f7f0/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 637353a..8bee358 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
@@ -23,6 +23,7 @@ import org.apache.cxf.jaxrs.lifecycle.ResourceProvider;
 import org.apache.cxf.message.Message;
 import org.osgi.framework.ServiceObjects;
 import org.osgi.framework.ServiceReference;
+import org.slf4j.Logger;
 
 import java.util.Collection;
 import java.util.Comparator;
@@ -52,8 +53,15 @@ public class Utils {
             return (String[]) propertyValue;
         }
         if (propertyValue instanceof Collection) {
-            return ((Collection<String>) propertyValue).toArray(new String[0]);
+            return
+                ((Collection<?>)propertyValue).stream().
+                    map(
+                        Object::toString
+                    ).toArray(
+                        String[]::new
+                    );
         }
+
         return new String[]{propertyValue.toString()};
     }
 
@@ -80,7 +88,8 @@ public class Utils {
         ServiceReference<T> serviceReference =
             serviceObjects.getServiceReference();
 
-        return new ComparableResourceProvider(serviceReference, serviceObjects);
+        return new ServiceReferenceResourceProvider(
+            serviceReference, serviceObjects);
     }
 
     public static <K, T extends Comparable<? super T>> OSGi<T> highestPer(
@@ -166,13 +175,13 @@ public class Utils {
 
     public interface ApplicationExtensionRegistration {}
 
-    public static class ComparableResourceProvider
-        implements ResourceProvider, Comparable<ComparableResourceProvider> {
+    public static class ServiceReferenceResourceProvider
+        implements ResourceProvider {
 
         private final ServiceObjects<?> _serviceObjects;
         private ServiceReference<?> _serviceReference;
 
-        public ComparableResourceProvider(
+        ServiceReferenceResourceProvider(
             ServiceReference<?> serviceReference,
             ServiceObjects<?> serviceObjects) {
             _serviceReference = serviceReference;
@@ -181,11 +190,6 @@ public class Utils {
         }
 
         @Override
-        public int compareTo(ComparableResourceProvider o) {
-            return _serviceReference.compareTo(o._serviceReference);
-        }
-
-        @Override
         public Object getInstance(Message m) {
             return _serviceObjects.getService();
         }
@@ -214,6 +218,10 @@ public class Utils {
             return false;
         }
 
+        ServiceReference<?> getServiceReference() {
+            return _serviceReference;
+        }
+
     }
 
     public static class ServiceTuple<T> implements Comparable<ServiceTuple<T>> {
@@ -221,22 +229,25 @@ public class Utils {
         private final ServiceReference<T> _serviceReference;
         private final T _service;
 
-        public ServiceTuple(ServiceReference<T> a, T service) {
+        ServiceTuple(ServiceReference<T> a, T service) {
             _serviceReference = a;
             _service = service;
         }
 
+        @Override
+        public int compareTo(ServiceTuple<T> o) {
+            return _serviceReference.compareTo(o._serviceReference);
+        }
+
         public T getService() {
             return _service;
         }
 
-        public ServiceReference<T> getServiceReference() {
-            return _serviceReference;
-        }
         @Override
         public int hashCode() {
             return _serviceReference.hashCode();
         }
+
         @Override
         public boolean equals(Object o) {
             if (this == o) return true;
@@ -245,9 +256,10 @@ public class Utils {
             ServiceTuple<?> that = (ServiceTuple<?>) o;
 
             return _serviceReference.equals(that._serviceReference);
-        }@Override
-        public int compareTo(ServiceTuple<T> o) {
-            return _serviceReference.compareTo(o._serviceReference);
+        }
+
+        ServiceReference<T> getServiceReference() {
+            return _serviceReference;
         }
 
 

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/2cf7f7f0/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 9caf49f..7668c6a 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,12 +51,12 @@ import javax.ws.rs.ext.ReaderInterceptor;
 import javax.ws.rs.ext.WriterInterceptor;
 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.Map;
-import java.util.Optional;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.function.Consumer;
@@ -101,21 +101,9 @@ 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(
-                sr -> getApplicationBase(sr::getProperty));
-
-    public static final Function<ServiceTuple<Application>, String>
-        APPLICATION_NAME =
-        ((Function<ServiceTuple<Application>, ServiceReference<Application>>)
-            ServiceTuple::getServiceReference).andThen(
-            sr -> getApplicationName(sr::getProperty));
-
-    public static final Collection<String> SUPPORTED_EXTENSION_INTERFACES =
-        new HashSet<>(
-            Arrays.asList(
+    static final Collection<String> SUPPORTED_EXTENSION_INTERFACES =
+        Collections.unmodifiableSet(
+            new HashSet<>(Arrays.asList(
                 ContainerRequestFilter.class.getName(),
                 ContainerResponseFilter.class.getName(),
                 ReaderInterceptor.class.getName(),
@@ -127,15 +115,18 @@ public class Whiteboard {
                 ParamConverterProvider.class.getName(),
                 Feature.class.getName(),
                 DynamicFeature.class.getName()
-            ));
-
-    public static final String DEFAULT_NAME = ".default";
-
-    public static OSGi<ServiceReference<CXFJaxRsServiceRegistrator>>
-        allApplicationReferences() {
-
-        return serviceReferences(CXFJaxRsServiceRegistrator.class);
-    }
+        )));
+    static final String DEFAULT_NAME = ".default";
+    private static final Function<ServiceTuple<Application>, String>
+        APPLICATION_BASE =
+        ((Function<ServiceTuple<Application>, ServiceReference<Application>>)
+            ServiceTuple::getServiceReference).andThen(
+                sr -> getApplicationBase(sr::getProperty));
+    private static final Function<ServiceTuple<Application>, String>
+        APPLICATION_NAME =
+        ((Function<ServiceTuple<Application>, ServiceReference<Application>>)
+            ServiceTuple::getServiceReference).andThen(
+            sr -> getApplicationName(sr::getProperty));
 
     public static OSGi<?> createWhiteboard(
         Dictionary<String, ?> configuration) {
@@ -167,46 +158,6 @@ public class Whiteboard {
             )))))));
     }
 
-    public static OSGi<ServiceReference<CXFJaxRsServiceRegistrator>>
-        defaultApplication() {
-
-        return
-            repeatInOrder(
-                serviceReferences(
-                    CXFJaxRsServiceRegistrator.class,
-                    String.format(
-                        "(%s=%s)", JAX_RS_NAME, DEFAULT_NAME)
-                )
-            );
-    }
-
-    public static OSGi<?> deployRegistrator(
-        Bus bus, ServiceTuple<Application> tuple, Map<String, Object> props,
-        AriesJaxRSServiceRuntime runtime) {
-
-        try {
-            CXFJaxRsServiceRegistrator registrator =
-                new CXFJaxRsServiceRegistrator(bus, tuple.getService());
-
-            return
-                onClose(registrator::close).then(
-                register(CXFJaxRsServiceRegistrator.class, registrator, props)
-            );
-        }
-        catch (Exception e) {
-            ServiceReference<Application> serviceReference =
-                tuple.getServiceReference();
-
-            runtime.addErroredApplication(serviceReference);
-
-            return onClose(
-                () -> runtime.removeErroredApplication(serviceReference)
-            ).then(
-                nothing()
-            );
-        }
-    }
-
     public static String getApplicationBase(PropertyHolder properties) {
         return properties.get(JAX_RS_APPLICATION_BASE).toString();
     }
@@ -290,6 +241,12 @@ public class Whiteboard {
             ));
     }
 
+    private static OSGi<ServiceReference<CXFJaxRsServiceRegistrator>>
+        allApplicationReferences() {
+
+        return serviceReferences(CXFJaxRsServiceRegistrator.class);
+    }
+
     private static OSGi<Collection<String>> bestEffortCalculationOfEnpoints(
         Filter filter) {
 
@@ -298,14 +255,9 @@ public class Whiteboard {
         return
             serviceReferences(HttpServiceRuntime.class, filter.toString()).
                 map(
-                    r -> Strings.stringPlus(
-                        r.getProperty(HTTP_SERVICE_ENDPOINT))
-                ).
-                filter(
-                    Optional::isPresent
-                ).
-                map(
-                    Optional::get
+                    r -> Arrays.asList(
+                        canonicalize(
+                            r.getProperty(HTTP_SERVICE_ENDPOINT)))
                 ).
                 foreach(
                     endPoints::addAll,
@@ -365,6 +317,19 @@ public class Whiteboard {
         return cxfNonSpringServlet;
     }
 
+    private static OSGi<ServiceReference<CXFJaxRsServiceRegistrator>>
+        defaultApplication() {
+
+        return
+            repeatInOrder(
+                serviceReferences(
+                    CXFJaxRsServiceRegistrator.class,
+                    String.format(
+                        "(%s=%s)", JAX_RS_NAME, DEFAULT_NAME)
+                )
+            );
+    }
+
     private static OSGi<ServiceTuple<Application>> deployApplication(
         Map<String, ?> configuration, BundleContext bundleContext,
         ServiceTuple<Application> tuple, AriesJaxRSServiceRuntime runtime) {
@@ -388,6 +353,33 @@ public class Whiteboard {
         );
     }
 
+    private static OSGi<?> deployRegistrator(
+        Bus bus, ServiceTuple<Application> tuple, Map<String, Object> props,
+        AriesJaxRSServiceRuntime runtime) {
+
+        try {
+            CXFJaxRsServiceRegistrator registrator =
+                new CXFJaxRsServiceRegistrator(bus, tuple.getService());
+
+            return
+                onClose(registrator::close).then(
+                register(CXFJaxRsServiceRegistrator.class, registrator, props)
+            );
+        }
+        catch (RuntimeException e) {
+            ServiceReference<Application> serviceReference =
+                tuple.getServiceReference();
+
+            runtime.addErroredApplication(serviceReference);
+
+            return onClose(
+                () -> runtime.removeErroredApplication(serviceReference)
+            ).then(
+                nothing()
+            );
+        }
+    }
+
     private static String getApplicationExtensionsFilter() {
         return format(
             "(&(!(objectClass=%s))(%s=%s)%s)",


[2/4] aries-jax-rs-whiteboard git commit: Add extension interfaces to ExtensionDTO

Posted by cs...@apache.org.
Add extension interfaces to ExtensionDTO


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

Branch: refs/heads/master
Commit: b117b6f22e39bfa261399ccfde079fdbfe365403
Parents: 638ebef
Author: Carlos Sierra <cs...@apache.org>
Authored: Mon Sep 4 12:44:14 2017 +0200
Committer: Carlos Sierra <cs...@apache.org>
Committed: Mon Sep 4 12:44:14 2017 +0200

----------------------------------------------------------------------
 .../rs/whiteboard/internal/AriesJaxRSServiceRuntime.java  | 10 ++++++++++
 .../apache/aries/jax/rs/whiteboard/internal/Utils.java    |  4 ++++
 2 files changed, 14 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/b117b6f2/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 9a79da8..a3c53c9 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
@@ -33,6 +33,7 @@ import org.osgi.service.jaxrs.whiteboard.JaxRSWhiteboardConstants;
 
 import javax.ws.rs.core.Application;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
@@ -45,8 +46,10 @@ import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.function.BiFunction;
 import java.util.stream.Stream;
 
+import static org.apache.aries.jax.rs.whiteboard.internal.Utils.canonicalize;
 import static org.apache.aries.jax.rs.whiteboard.internal.Utils.generateApplicationName;
 import static org.apache.aries.jax.rs.whiteboard.internal.Whiteboard.DEFAULT_NAME;
+import static org.apache.aries.jax.rs.whiteboard.internal.Whiteboard.SUPPORTED_EXTENSION_INTERFACES;
 import static org.apache.aries.jax.rs.whiteboard.internal.Whiteboard.getApplicationBase;
 import static org.osgi.service.jaxrs.whiteboard.JaxRSWhiteboardConstants.JAX_RS_NAME;
 
@@ -490,6 +493,13 @@ public class AriesJaxRSServiceRuntime implements JaxRSServiceRuntime {
             toString();
         extensionDTO.serviceId = (Long)serviceReference.getProperty(
             "service.id");
+        extensionDTO.extensionTypes =
+            Arrays.stream(
+                canonicalize(serviceReference.getProperty("objectClass"))).
+            filter(
+                SUPPORTED_EXTENSION_INTERFACES::contains
+            ).
+            toArray(String[]::new);
 
         return extensionDTO;
     }

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/b117b6f2/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 1e5d15a..637353a 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
@@ -24,6 +24,7 @@ import org.apache.cxf.message.Message;
 import org.osgi.framework.ServiceObjects;
 import org.osgi.framework.ServiceReference;
 
+import java.util.Collection;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -50,6 +51,9 @@ public class Utils {
         if (propertyValue instanceof String[]) {
             return (String[]) propertyValue;
         }
+        if (propertyValue instanceof Collection) {
+            return ((Collection<String>) propertyValue).toArray(new String[0]);
+        }
         return new String[]{propertyValue.toString()};
     }
 


[3/4] aries-jax-rs-whiteboard git commit: No longer needed

Posted by cs...@apache.org.
No longer needed


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

Branch: refs/heads/master
Commit: e6fa583c0835f3dbc257047a98aaf15763ae449d
Parents: b117b6f
Author: Carlos Sierra <cs...@apache.org>
Authored: Mon Sep 4 12:45:37 2017 +0200
Committer: Carlos Sierra <cs...@apache.org>
Committed: Mon Sep 4 12:45:37 2017 +0200

----------------------------------------------------------------------
 .../jax/rs/whiteboard/internal/Whiteboard.java  | 23 --------------------
 1 file changed, 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/e6fa583c/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 156b57d..9caf49f 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
@@ -82,7 +82,6 @@ import static org.apache.aries.osgi.functional.OSGi.nothing;
 import static org.apache.aries.osgi.functional.OSGi.onClose;
 import static org.apache.aries.osgi.functional.OSGi.register;
 import static org.apache.aries.osgi.functional.OSGi.serviceReferences;
-import static org.apache.aries.osgi.functional.OSGi.services;
 import static org.osgi.service.http.runtime.HttpServiceRuntimeConstants.HTTP_SERVICE_ENDPOINT;
 import static org.osgi.service.http.whiteboard.HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME;
 import static org.osgi.service.http.whiteboard.HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_SELECT;
@@ -786,26 +785,4 @@ public class Whiteboard {
         }
     }
 
-    private static class ApplicationReference {
-        private final String _applicationName;
-        private final CXFJaxRsServiceRegistrator _registrator;
-
-        public ApplicationReference(
-            String applicationName,
-            CXFJaxRsServiceRegistrator registrator) {
-
-            _applicationName = applicationName;
-            _registrator = registrator;
-        }
-
-        public String getApplicationName() {
-            return _applicationName;
-        }
-
-        public CXFJaxRsServiceRegistrator getRegistrator() {
-            return _registrator;
-        }
-
-    }
-
 }