Repository: aries-jax-rs-whiteboard Updated Branches: refs/heads/master f0dcc9ae5 -> 5629d40f0
Enable async support 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/9d1d0617 Tree: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/tree/9d1d0617 Diff: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/diff/9d1d0617 Branch: refs/heads/master Commit: 9d1d0617d146a44d996dd033c699a8ae2361e3c8 Parents: f0dcc9a Author: Carlos Sierra <[email protected]> Authored: Mon Oct 2 15:06:01 2017 +0200 Committer: Carlos Sierra <[email protected]> Committed: Mon Oct 2 15:07:12 2017 +0200 ---------------------------------------------------------------------- jax-rs.itests/src/main/java/test/JaxrsTest.java | 77 +++++++++++++++----- .../main/java/test/types/TestAsyncResource.java | 61 ++++++++++++++++ .../jax/rs/whiteboard/internal/Whiteboard.java | 2 + 3 files changed, 121 insertions(+), 19 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/9d1d0617/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 0e25089..94226d8 100644 --- a/jax-rs.itests/src/main/java/test/JaxrsTest.java +++ b/jax-rs.itests/src/main/java/test/JaxrsTest.java @@ -26,6 +26,9 @@ import java.util.Dictionary; import java.util.Hashtable; import java.util.Iterator; import java.util.Set; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import java.util.concurrent.atomic.AtomicBoolean; import org.junit.After; import org.junit.Test; @@ -45,10 +48,12 @@ import test.types.TestAddonLifecycle; import test.types.TestApplication; import test.types.TestApplicationConflict; import test.types.TestApplicationWithException; +import test.types.TestAsyncResource; import test.types.TestFilter; import test.types.TestFilterAndExceptionMapper; import test.types.TestHelper; +import javax.ws.rs.client.InvocationCallback; import javax.ws.rs.client.WebTarget; import javax.ws.rs.container.ContainerResponseFilter; import javax.ws.rs.core.Application; @@ -103,25 +108,6 @@ public class JaxrsTest extends TestHelper { } @Test - public void testApplicationWithoutStartingSlash() - throws InterruptedException { - - assertEquals(0, getRuntimeDTO().applicationDTOs.length); - - registerApplication( - new TestApplication(), JAX_RS_APPLICATION_BASE, "test-application"); - - assertEquals(1, getRuntimeDTO().applicationDTOs.length); - - WebTarget webTarget = createDefaultTarget().path("/test-application"); - - Response response = webTarget.request().get(); - - assertEquals("Hello application", - response.readEntity(String.class)); - } - - @Test public void testApplicationChangeCount() throws Exception { Long changeCount = (Long)_runtimeServiceReference.getProperty( "service.changecount"); @@ -641,6 +627,59 @@ public class JaxrsTest extends TestHelper { } @Test + public void testApplicationWithoutStartingSlash() + throws InterruptedException { + + assertEquals(0, getRuntimeDTO().applicationDTOs.length); + + registerApplication( + new TestApplication(), JAX_RS_APPLICATION_BASE, "test-application"); + + assertEquals(1, getRuntimeDTO().applicationDTOs.length); + + WebTarget webTarget = createDefaultTarget().path("/test-application"); + + Response response = webTarget.request().get(); + + assertEquals("Hello application", + response.readEntity(String.class)); + } + + @Test + public void testAsyncResource() + throws ExecutionException, InterruptedException { + + WebTarget webTarget = + createDefaultTarget().path("whiteboard").path("async"). + path("HelloAsync"); + + AtomicBoolean pre = new AtomicBoolean(); + AtomicBoolean post = new AtomicBoolean(); + + registerAddon( + new TestAsyncResource(() -> pre.set(true), () -> post.set(true))); + + Future<String> future = webTarget.request().async().get( + new InvocationCallback<String>() { + @Override + public void completed(String s) { + assertTrue(pre.get()); + } + + @Override + public void failed(Throwable throwable) { + + } + }); + + String result = future.get(); + + assertTrue(post.get()); + + assertEquals("This should say HelloAsync", "HelloAsync", result); + } + + @Test public void testEndpointsOverride() { WebTarget webTarget = createDefaultTarget().path("conflict"); http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/9d1d0617/jax-rs.itests/src/main/java/test/types/TestAsyncResource.java ---------------------------------------------------------------------- diff --git a/jax-rs.itests/src/main/java/test/types/TestAsyncResource.java b/jax-rs.itests/src/main/java/test/types/TestAsyncResource.java new file mode 100644 index 0000000..4297aee --- /dev/null +++ b/jax-rs.itests/src/main/java/test/types/TestAsyncResource.java @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package test.types; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.container.AsyncResponse; +import javax.ws.rs.container.Suspended; +import javax.ws.rs.core.MediaType; + +@Path("whiteboard/async") +public class TestAsyncResource { + + private final Runnable preResume; + private final Runnable postResume; + + public TestAsyncResource(Runnable preResume, Runnable postResume) { + this.preResume = preResume; + this.postResume = postResume; + } + + @GET + @Path("{name}") + @Produces(MediaType.TEXT_PLAIN) + public void echo(@Suspended AsyncResponse async, + @PathParam("name") String value) { + + new Thread(() -> { + try { + try { + Thread.sleep(1000); + } catch (Exception e) { + preResume.run(); + async.resume(e); + return; + } + preResume.run(); + async.resume(value); + } finally { + postResume.run(); + } + }).start(); + } +} http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/9d1d0617/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 48af331..7af9ec2 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 @@ -89,6 +89,7 @@ import static org.osgi.service.http.runtime.HttpServiceRuntimeConstants.HTTP_SER import static org.osgi.service.http.whiteboard.HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME; import static org.osgi.service.http.whiteboard.HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_SELECT; import static org.osgi.service.http.whiteboard.HttpWhiteboardConstants.HTTP_WHITEBOARD_DEFAULT_CONTEXT_NAME; +import static org.osgi.service.http.whiteboard.HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_ASYNC_SUPPORTED; import static org.osgi.service.http.whiteboard.HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN; import static org.osgi.service.http.whiteboard.HttpWhiteboardConstants.HTTP_WHITEBOARD_TARGET; import static org.osgi.service.jaxrs.runtime.JaxRSServiceRuntimeConstants.JAX_RS_SERVICE_ENDPOINT; @@ -741,6 +742,7 @@ public class Whiteboard { } properties.putIfAbsent(HTTP_WHITEBOARD_SERVLET_PATTERN, address + "/*"); + properties.putIfAbsent(HTTP_WHITEBOARD_SERVLET_ASYNC_SUPPORTED, true); CXFNonSpringServlet cxfNonSpringServlet = createCXFServlet(bus);
