You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2012/09/23 19:48:36 UTC
svn commit: r1389105 - in /cxf/trunk:
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java
Author: sergeyb
Date: Sun Sep 23 17:48:36 2012
New Revision: 1389105
URL: http://svn.apache.org/viewvc?rev=1389105&view=rev
Log:
Adding an async() method to WebClient to keep the async related interface in line with jaxrs20
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java?rev=1389105&r1=1389104&r2=1389105&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java Sun Sep 23 17:48:36 2012
@@ -32,10 +32,13 @@ import java.util.Map;
import java.util.concurrent.Future;
import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.client.AsyncInvoker;
import javax.ws.rs.client.ClientException;
+import javax.ws.rs.client.Entity;
import javax.ws.rs.client.InvocationCallback;
import javax.ws.rs.core.Cookie;
import javax.ws.rs.core.EntityTag;
+import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
@@ -88,28 +91,7 @@ public class WebClient extends AbstractC
}
- class ClientAsyncResponseInterceptor extends AbstractPhaseInterceptor<Message> {
- public ClientAsyncResponseInterceptor() {
- super(Phase.UNMARSHAL);
- }
-
- @Override
- public void handleMessage(Message message) throws Fault {
- if (message.getExchange().isSynchronous()) {
- return;
- }
- handleAsyncResponse(message);
- }
-
- @Override
- public void handleFault(Message message) {
- if (message.getExchange().isSynchronous()) {
- return;
- }
- handleAsyncFault(message);
- }
-
- }
+
/**
* Creates WebClient
@@ -499,6 +481,12 @@ public class WebClient extends AbstractC
return invoke("GET", null, responseClass);
}
+ /**
+ * Does HTTP Async GET invocation and returns Future.
+ * Shortcut for async().get(InvocationCallback)
+ * @param callback invocation callback
+ * @return the future
+ */
public <T> Future<T> get(InvocationCallback<T> callback) {
return doInvokeAsync("GET", null, null, null, callback);
}
@@ -804,6 +792,7 @@ public class WebClient extends AbstractC
}
return null;
}
+
protected <T> Future<T> doInvokeAsync(String httpMethod,
Object body,
Class<?> requestClass,
@@ -1048,4 +1037,239 @@ public class WebClient extends AbstractC
}
return clientState;
}
+
+ // Async related code, consider pushing most of it to AbstractClient
+ public AsyncInvoker async() {
+ return new AsyncInvokerImpl();
+ }
+
+ class ClientAsyncResponseInterceptor extends AbstractPhaseInterceptor<Message> {
+ public ClientAsyncResponseInterceptor() {
+ super(Phase.UNMARSHAL);
+ }
+
+ @Override
+ public void handleMessage(Message message) throws Fault {
+ if (message.getExchange().isSynchronous()) {
+ return;
+ }
+ handleAsyncResponse(message);
+ }
+
+ @Override
+ public void handleFault(Message message) {
+ if (message.getExchange().isSynchronous()) {
+ return;
+ }
+ handleAsyncFault(message);
+ }
+
+ }
+
+ class AsyncInvokerImpl implements AsyncInvoker {
+
+ @Override
+ public Future<Response> get() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <T> Future<T> get(Class<T> responseType) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <T> Future<T> get(GenericType<T> responseType) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <T> Future<T> get(InvocationCallback<T> callback) {
+ return doInvokeAsync("GET", null, null, null, callback);
+ }
+
+ @Override
+ public Future<Response> put(Entity<?> entity) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <T> Future<T> put(Entity<?> entity, Class<T> responseType) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <T> Future<T> put(Entity<?> entity, GenericType<T> responseType) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <T> Future<T> put(Entity<?> entity, InvocationCallback<T> callback) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Future<Response> post(Entity<?> entity) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <T> Future<T> post(Entity<?> entity, Class<T> responseType) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <T> Future<T> post(Entity<?> entity, GenericType<T> responseType) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <T> Future<T> post(Entity<?> entity, InvocationCallback<T> callback) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Future<Response> delete() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <T> Future<T> delete(Class<T> responseType) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <T> Future<T> delete(GenericType<T> responseType) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <T> Future<T> delete(InvocationCallback<T> callback) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Future<Response> head() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Future<Response> head(InvocationCallback<Response> callback) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Future<Response> options() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <T> Future<T> options(Class<T> responseType) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <T> Future<T> options(GenericType<T> responseType) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <T> Future<T> options(InvocationCallback<T> callback) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Future<Response> trace() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <T> Future<T> trace(Class<T> responseType) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <T> Future<T> trace(GenericType<T> responseType) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <T> Future<T> trace(InvocationCallback<T> callback) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Future<Response> method(String name) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <T> Future<T> method(String name, Class<T> responseType) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <T> Future<T> method(String name, GenericType<T> responseType) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <T> Future<T> method(String name, InvocationCallback<T> callback) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Future<Response> method(String name, Entity<?> entity) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <T> Future<T> method(String name, Entity<?> entity, Class<T> responseType) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <T> Future<T> method(String name, Entity<?> entity, GenericType<T> responseType) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <T> Future<T> method(String name, Entity<?> entity, InvocationCallback<T> callback) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ }
}
Modified: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java?rev=1389105&r1=1389104&r2=1389105&view=diff
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java (original)
+++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java Sun Sep 23 17:48:36 2012
@@ -60,10 +60,17 @@ public class JAXRS20ClientServerBookTest
String address = "http://localhost:" + PORT + "/bookstore/bookheaders/simple";
doTestBook(address);
}
+
@Test
public void testGetBookAsync() throws Exception {
String address = "http://localhost:" + PORT + "/bookstore/bookheaders/simple";
- doTestBookAsync(address);
+ doTestBookAsync(address, false);
+ }
+
+ @Test
+ public void testGetBookAsyncInvoker() throws Exception {
+ String address = "http://localhost:" + PORT + "/bookstore/bookheaders/simple";
+ doTestBookAsync(address, true);
}
@Test
@@ -74,7 +81,7 @@ public class JAXRS20ClientServerBookTest
@Test
public void testGetBookWrongPathAsync() throws Exception {
String address = "http://localhost:" + PORT + "/wrongpath";
- doTestBookAsync(address);
+ doTestBookAsync(address, false);
}
private void doTestBook(String address) {
@@ -92,7 +99,10 @@ public class JAXRS20ClientServerBookTest
assertEquals("serverWrite", response.getHeaderString("ServerWriterInterceptor"));
assertEquals("http://localhost/redirect", response.getHeaderString(HttpHeaders.LOCATION));
}
- private void doTestBookAsync(String address) throws InterruptedException, ExecutionException {
+
+ private void doTestBookAsync(String address, boolean asyncInvoker)
+ throws InterruptedException, ExecutionException {
+
List<Object> providers = new ArrayList<Object>();
providers.add(new ClientHeaderRequestFilter());
providers.add(new ClientHeaderResponseFilter());
@@ -100,13 +110,15 @@ public class JAXRS20ClientServerBookTest
WebClient.getConfig(wc).getHttpConduit().getClient().setReceiveTimeout(1000000L);
final Holder<Book> holder = new Holder<Book>();
- Future<Book> future = wc.get(new InvocationCallback<Book>() {
+ final InvocationCallback<Book> callback = new InvocationCallback<Book>() {
public void completed(Book response) {
holder.value = response;
}
public void failed(ClientException error) {
}
- });
+ };
+
+ Future<Book> future = asyncInvoker ? wc.async().get(callback) : wc.get(callback);
Book book = future.get();
assertSame(book, holder.value);
assertEquals(124L, book.getId());