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