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/07/19 17:18:07 UTC
[1/2] aries-jax-rs-whiteboard git commit: Reimplement resource
ordering
Repository: aries-jax-rs-whiteboard
Updated Branches:
refs/heads/master 006c69efc -> 3a2d75820
Reimplement resource ordering
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/398ad838
Tree: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/tree/398ad838
Diff: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/diff/398ad838
Branch: refs/heads/master
Commit: 398ad838a442f5941cb425b74cccfb97cb51c789
Parents: 006c69e
Author: Carlos Sierra <cs...@apache.org>
Authored: Wed Jul 19 19:11:27 2017 +0200
Committer: Carlos Sierra <cs...@apache.org>
Committed: Wed Jul 19 19:11:27 2017 +0200
----------------------------------------------------------------------
.../internal/CXFJaxRsServiceRegistrator.java | 95 +++++++++++---------
.../aries/jax/rs/whiteboard/internal/Utils.java | 93 +++++++++++--------
2 files changed, 109 insertions(+), 79 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/398ad838/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 43c9f1a..8d6ee29 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,21 +20,24 @@ package org.apache.aries.jax.rs.whiteboard.internal;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.TreeSet;
import javax.ws.rs.core.Application;
+import org.apache.aries.jax.rs.whiteboard.internal.Utils.ComparableResourceProvider;
import org.apache.cxf.Bus;
import org.apache.cxf.endpoint.Server;
import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
+import org.apache.cxf.jaxrs.ext.ResourceComparator;
import org.apache.cxf.jaxrs.lifecycle.ResourceProvider;
+import org.apache.cxf.jaxrs.model.ClassResourceInfo;
+import org.apache.cxf.jaxrs.model.OperationResourceInfo;
import org.apache.cxf.jaxrs.provider.json.JSONProvider;
import org.apache.cxf.jaxrs.utils.ResourceUtils;
+import org.apache.cxf.message.Message;
import org.apache.cxf.service.model.EndpointInfo;
import org.apache.cxf.transport.Destination;
import org.apache.cxf.transport.DestinationFactory;
@@ -51,8 +54,7 @@ public class CXFJaxRsServiceRegistrator {
private final Map<String, Object> _properties;
private final Collection<Object> _providers = new ArrayList<>();
private Server _server;
- private final Collection<ResourceInformation<ServiceReference<?>>>
- _services = new TreeSet<>(Comparator.reverseOrder());
+ private final Collection<ResourceProvider> _services = new ArrayList<>();
private static final String CXF_ENDPOINT_ADDRESS = "CXF_ENDPOINT_ADDRESS";
@@ -81,13 +83,12 @@ public class CXFJaxRsServiceRegistrator {
return properties;
}
- public void add(
- ResourceInformation<ServiceReference<?>> resourceInformation) {
+ public void add(ResourceProvider resourceProvider) {
if (_closed) {
return;
}
- _services.add(resourceInformation);
+ _services.add(resourceProvider);
rewire();
}
@@ -114,13 +115,12 @@ public class CXFJaxRsServiceRegistrator {
_closed = true;
}
- public void remove(
- ResourceInformation<ServiceReference<?>> resourceInformation) {
+ public void remove(ResourceProvider resourceProvider) {
if (_closed) {
return;
}
- _services.remove(resourceInformation);
+ _services.remove(resourceProvider);
rewire();
}
@@ -135,6 +135,44 @@ public class CXFJaxRsServiceRegistrator {
rewire();
}
+ private static class ComparableResourceComparator
+ implements ResourceComparator {
+
+ @Override
+ public int compare(
+ ClassResourceInfo cri1, ClassResourceInfo cri2, Message message) {
+
+ ResourceProvider rp1 = cri1.getResourceProvider();
+ ResourceProvider rp2 = cri2.getResourceProvider();
+
+ if (rp1 instanceof ComparableResourceProvider &&
+ rp2 instanceof ComparableResourceProvider) {
+
+ return -((ComparableResourceProvider) rp1).compareTo(
+ (ComparableResourceProvider) rp2);
+ }
+
+ if (rp1 instanceof ComparableResourceProvider) {
+ return 1;
+ }
+
+ if (rp2 instanceof ComparableResourceProvider) {
+ return -1;
+ }
+
+ return 0;
+ }
+
+ @Override
+ public int compare(
+ OperationResourceInfo oper1, OperationResourceInfo oper2,
+ Message message) {
+
+ return 0;
+ }
+
+ }
+
protected synchronized void rewire() {
if (_server != null) {
_server.destroy();
@@ -176,13 +214,15 @@ public class CXFJaxRsServiceRegistrator {
jaxRsServerFactoryBean.setProvider(provider);
}
- for (ResourceInformation<?> resourceInformation : _services) {
- jaxRsServerFactoryBean.setResourceProvider(
- resourceInformation.getResourceProvider());
+ for (ResourceProvider resourceProvider: _services) {
+ jaxRsServerFactoryBean.setResourceProvider(resourceProvider);
}
jaxRsServerFactoryBean.setAddress(address);
+ jaxRsServerFactoryBean.setResourceComparator(
+ new ComparableResourceComparator());
+
_server = jaxRsServerFactoryBean.create();
_server.start();
@@ -198,35 +238,6 @@ public class CXFJaxRsServiceRegistrator {
return endpointType.cast(server);
}
- public static class ResourceInformation<T extends Comparable<? super T>>
- implements Comparable<ResourceInformation<T>> {
-
- private final T _comparable;
- private final ResourceProvider _resourceProvider;
-
- public ResourceInformation(
- T comparable, ResourceProvider resourceProvider) {
- _comparable = comparable;
-
- _resourceProvider = resourceProvider;
- }
-
- public ResourceProvider getResourceProvider() {
- return _resourceProvider;
- }
-
- @Override
- public int compareTo(ResourceInformation<T> resourceInformation) {
-
- if (resourceInformation == null) {
- return 1;
- }
-
- return _comparable.compareTo(resourceInformation._comparable);
- }
-
- }
-
/**
* This class exists as a workaround for
* https://issues.apache.org/jira/browse/CXF-7409
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/398ad838/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 7b44394..69bbe93 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
@@ -17,7 +17,6 @@
package org.apache.aries.jax.rs.whiteboard.internal;
-import org.apache.aries.jax.rs.whiteboard.internal.CXFJaxRsServiceRegistrator.ResourceInformation;
import org.apache.aries.osgi.functional.Event;
import org.apache.aries.osgi.functional.OSGi;
import org.apache.cxf.Bus;
@@ -127,17 +126,15 @@ public class Utils {
return program.route(new RepeatInOrderRouter<>());
}
- public static <T> OSGi<ResourceInformation<ServiceReference<?>>>
+ public static <T> OSGi<ResourceProvider>
registerEndpoint(
ServiceReference<?> serviceReference,
CXFJaxRsServiceRegistrator registrator,
ServiceObjects<T> serviceObjects) {
ResourceProvider resourceProvider = getResourceProvider(serviceObjects);
- ResourceInformation<ServiceReference<?>> resourceInformation =
- new ResourceInformation<>(serviceReference, resourceProvider);
- registrator.add(resourceInformation);
- return just(resourceInformation);
+ registrator.add(resourceProvider);
+ return just(resourceProvider);
}
public static String safeToString(Object object) {
@@ -147,43 +144,16 @@ public class Utils {
public static <T> ResourceProvider getResourceProvider(
ServiceObjects<T> serviceObjects) {
- return new ResourceProvider() {
+ ServiceReference<T> serviceReference = serviceObjects.getServiceReference();
- @Override
- public Object getInstance(Message m) {
- return serviceObjects.getService();
- }
-
- @Override
- @SuppressWarnings("unchecked")
- public void releaseInstance(Message m, Object o) {
- serviceObjects.ungetService((T)o);
- }
-
- @Override
- public Class<?> getResourceClass() {
- T service = serviceObjects.getService();
-
- try {
- return service.getClass();
- }
- finally {
- serviceObjects.ungetService(service);
- }
- }
-
- @Override
- public boolean isSingleton() {
- return false;
- }
- };
+ return new ComparableResourceProvider(serviceReference, serviceObjects);
}
public static void unregisterEndpoint(
CXFJaxRsServiceRegistrator registrator,
- ResourceInformation<ServiceReference<?>> resourceInformation) {
+ ResourceProvider resourceProvider) {
- registrator.remove(resourceInformation);
+ registrator.remove(resourceProvider);
}
private static class RepeatInOrderRouter<T extends Comparable<? super T>>
@@ -229,4 +199,53 @@ public class Utils {
}
+ public static class ComparableResourceProvider
+ implements ResourceProvider, Comparable<ComparableResourceProvider> {
+
+ private ServiceReference<?> _serviceReference;
+ private final ServiceObjects<?> _serviceObjects;
+
+ public ComparableResourceProvider(
+ ServiceReference<?> serviceReference,
+ ServiceObjects<?> serviceObjects) {
+ _serviceReference = serviceReference;
+
+ _serviceObjects = serviceObjects;
+ }
+
+ @Override
+ public int compareTo(ComparableResourceProvider o) {
+ return _serviceReference.compareTo(o._serviceReference);
+ }
+
+ @Override
+ public Object getInstance(Message m) {
+ return _serviceObjects.getService();
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public void releaseInstance(Message m, Object o) {
+ ((ServiceObjects)_serviceObjects).ungetService(o);
+ }
+
+ @Override
+ public Class<?> getResourceClass() {
+ Object service = _serviceObjects.getService();
+
+ try {
+ return service.getClass();
+ }
+ finally {
+ ((ServiceObjects)_serviceObjects).ungetService(service);
+ }
+ }
+
+ @Override
+ public boolean isSingleton() {
+ return false;
+ }
+
+ }
+
}
[2/2] aries-jax-rs-whiteboard git commit: Add test for endpoint
override
Posted by cs...@apache.org.
Add test for endpoint override
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/3a2d7582
Tree: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/tree/3a2d7582
Diff: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/diff/3a2d7582
Branch: refs/heads/master
Commit: 3a2d7582045e5e78d879eb323b942ec669373d31
Parents: 398ad83
Author: Carlos Sierra <cs...@apache.org>
Authored: Wed Jul 19 19:13:04 2017 +0200
Committer: Carlos Sierra <cs...@apache.org>
Committed: Wed Jul 19 19:13:04 2017 +0200
----------------------------------------------------------------------
jax-rs.itests/src/main/java/test/JaxrsTest.java | 52 +++++++++++++++++++-
.../main/java/test/types/TestAddonConflict.java | 37 ++++++++++++++
.../java/test/types/TestAddonConflict2.java | 36 ++++++++++++++
3 files changed, 124 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/3a2d7582/jax-rs.itests/src/main/java/test/JaxrsTest.java
----------------------------------------------------------------------
diff --git a/jax-rs.itests/src/main/java/test/JaxrsTest.java b/jax-rs.itests/src/main/java/test/JaxrsTest.java
index 1c6e8e7..1f50052 100644
--- a/jax-rs.itests/src/main/java/test/JaxrsTest.java
+++ b/jax-rs.itests/src/main/java/test/JaxrsTest.java
@@ -36,6 +36,8 @@ import org.osgi.framework.ServiceRegistration;
import org.osgi.service.jaxrs.runtime.dto.FailedApplicationDTO;
import org.osgi.util.tracker.ServiceTracker;
import test.types.TestAddon;
+import test.types.TestAddonConflict;
+import test.types.TestAddonConflict2;
import test.types.TestAddonLifecycle;
import test.types.TestApplication;
import test.types.TestApplicationConflict;
@@ -51,7 +53,6 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNull;
-
public class JaxrsTest {
private ServiceTracker<ClientBuilder, ClientBuilder> _clientBuilderTracker;
@@ -430,6 +431,55 @@ public class JaxrsTest {
}
@Test
+ public void testEndpointsOverride() {
+ Client client = createClient();
+
+ WebTarget webTarget = client.
+ target("http://localhost:8080").
+ path("conflict");
+
+ ServiceRegistration<?> serviceRegistration = null;
+ ServiceRegistration<?> serviceRegistration2 = null;
+
+ try {
+ serviceRegistration = registerAddon(new TestAddonConflict());
+
+ Response response = webTarget.request().get();
+
+ assertEquals(
+ "This should say hello1", "hello1",
+ response.readEntity(String.class));
+
+ serviceRegistration2 = registerAddon(
+ new TestAddonConflict2(), "service.ranking", 1);
+
+ response = webTarget.request().get();
+
+ assertEquals(
+ "This should say hello2", "hello2",
+ response.readEntity(String.class));
+
+ serviceRegistration2.unregister();
+
+ serviceRegistration2 = null;
+
+ response = webTarget.request().get();
+
+ assertEquals(
+ "This should say hello1", "hello1",
+ response.readEntity(String.class));
+ }
+ finally {
+ if (serviceRegistration != null) {
+ serviceRegistration.unregister();
+ }
+ if (serviceRegistration2 != null) {
+ serviceRegistration2.unregister();
+ }
+ }
+ }
+
+ @Test
public void testStandaloneEndPoint() {
Client client = createClient();
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/3a2d7582/jax-rs.itests/src/main/java/test/types/TestAddonConflict.java
----------------------------------------------------------------------
diff --git a/jax-rs.itests/src/main/java/test/types/TestAddonConflict.java b/jax-rs.itests/src/main/java/test/types/TestAddonConflict.java
new file mode 100644
index 0000000..02f96a7
--- /dev/null
+++ b/jax-rs.itests/src/main/java/test/types/TestAddonConflict.java
@@ -0,0 +1,37 @@
+/**
+ * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
+ * <p>
+ * This library is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ * <p>
+ * This library is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ */
+
+package test.types;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+
+/**
+ * @author Carlos Sierra Andrés
+ */
+@Path("/conflict")
+public class TestAddonConflict {
+
+ @GET
+ public String sayHello() {
+ return "hello1";
+ }
+
+ @GET
+ @Path("/conflict1")
+ public String conflict() {
+ return "conflict1";
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/3a2d7582/jax-rs.itests/src/main/java/test/types/TestAddonConflict2.java
----------------------------------------------------------------------
diff --git a/jax-rs.itests/src/main/java/test/types/TestAddonConflict2.java b/jax-rs.itests/src/main/java/test/types/TestAddonConflict2.java
new file mode 100644
index 0000000..c402753
--- /dev/null
+++ b/jax-rs.itests/src/main/java/test/types/TestAddonConflict2.java
@@ -0,0 +1,36 @@
+/**
+ * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
+ * <p>
+ * This library is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ * <p>
+ * This library is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ */
+
+package test.types;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+
+/**
+ * @author Carlos Sierra Andrés
+ */
+@Path("/conflict")
+public class TestAddonConflict2 {
+
+ @GET
+ public String sayHello() {
+ return "hello2";
+ }
+
+ @GET
+ @Path("/conflict2")
+ public String conflict() {
+ return "conflict2";
+ }
+}