Repository: cxf
Updated Branches:
  refs/heads/3.0.x-fixes 53d270e7f -> be23f28c9


[CXF-6390] Getting the exception set on the callback only once in case of POST 
requests failing on the client side


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/be23f28c
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/be23f28c
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/be23f28c

Branch: refs/heads/3.0.x-fixes
Commit: be23f28c9991419599482c11bfb5366646787397
Parents: 53d270e
Author: Sergey Beryozkin <sberyoz...@talend.com>
Authored: Tue May 5 18:55:20 2015 +0100
Committer: Sergey Beryozkin <sberyoz...@talend.com>
Committed: Tue May 5 21:27:18 2015 +0100

----------------------------------------------------------------------
 .../apache/cxf/jaxrs/client/AbstractClient.java | 20 ++++++++++++----
 .../org/apache/cxf/jaxrs/client/WebClient.java  | 10 +-------
 .../cxf/systest/jaxrs/JAXRSAsyncClientTest.java | 24 +++++++++++++++++++-
 3 files changed, 39 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/be23f28c/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java
----------------------------------------------------------------------
diff --git 
a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java 
b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java
index c36d6a9..bf3dc6d 100644
--- a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java
+++ b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java
@@ -1067,12 +1067,22 @@ public abstract class AbstractClient implements Client {
         } 
 
         public void handleMessage(Message message) throws Fault {
-            Exception ex = message.getContent(Exception.class);
-            if (!message.getExchange().isSynchronous() && ex != null) {
-                //TODO: make sure it works with the failover feature
-                JaxrsClientCallback<?> cb = 
message.getExchange().get(JaxrsClientCallback.class);
-                cb.handleException(message, new ProcessingException(ex));
+            if (!message.getExchange().isSynchronous()) {
+                Throwable ex = message.getContent(Exception.class);
+                if (ex == null) {
+                    ex = message.getExchange().get(Exception.class);
+                }
+                if (ex != null) {
+                    JaxrsClientCallback<?> cb = 
message.getExchange().get(JaxrsClientCallback.class);
+                    if (ex instanceof Fault) {
+                        ex = ex.getCause();
+                    }
+                    ex = ex instanceof ProcessingException ? ex : new 
ProcessingException(ex);
+                    cb.handleException(message, ex);
+                }
             }
+            
+            
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/cxf/blob/be23f28c/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
----------------------------------------------------------------------
diff --git 
a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java 
b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
index ff1650f..5097bec 100644
--- a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
+++ b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
@@ -984,15 +984,7 @@ public class WebClient extends AbstractClient {
         
         doRunInterceptorChain(m);
         
-        Future<T> future = cb.createFuture();
-        if (m.getExchange().get(Exception.class) != null) {
-            Throwable ex = m.getExchange().get(Exception.class);
-            if (ex instanceof Fault) {
-                ex = ex.getCause();
-            }
-            cb.handleException(m, ex);
-        }
-        return future;
+        return cb.createFuture();
     }
 
     

http://git-wip-us.apache.org/repos/asf/cxf/blob/be23f28c/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSAsyncClientTest.java
----------------------------------------------------------------------
diff --git 
a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSAsyncClientTest.java
 
b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSAsyncClientTest.java
index 4cf617e..2991df5 100644
--- 
a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSAsyncClientTest.java
+++ 
b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSAsyncClientTest.java
@@ -38,9 +38,11 @@ import javax.ws.rs.client.ClientRequestContext;
 import javax.ws.rs.client.ClientResponseContext;
 import javax.ws.rs.client.ClientResponseFilter;
 import javax.ws.rs.client.Entity;
+import javax.ws.rs.client.Invocation;
 import javax.ws.rs.client.InvocationCallback;
 import javax.ws.rs.client.ResponseProcessingException;
 import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.GenericType;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.core.Response;
@@ -150,7 +152,7 @@ public class JAXRSAsyncClientTest extends 
AbstractBusClientServerTestBase {
         }
     }
     @Test
-    public void testNonExistentJaxrs20() throws Exception {
+    public void testNonExistentJaxrs20WithGet() throws Exception {
         String address = "http://localhostt/bookstore";;
         Client c = ClientBuilder.newClient();
         c.register(new TestResponseFilter());
@@ -169,6 +171,26 @@ public class JAXRSAsyncClientTest extends 
AbstractBusClientServerTestBase {
     }
     
     @Test
+    public void testNonExistentJaxrs20WithPost() throws Exception {
+        Client client = ClientBuilder.newClient();
+        WebTarget target = client.target("http://test.test/";);
+        Invocation.Builder builder = target.request();
+        Entity<String> entity = Entity.entity("entity", 
MediaType.WILDCARD_TYPE);
+        Invocation invocation = builder.buildPost(entity);
+        Future<String> future = invocation.submit(
+            new GenericType<String>() {
+            }
+        );
+        
+        try {
+            future.get();
+        } catch (Exception ex) {
+            Throwable cause = ex.getCause();
+            assertTrue(cause instanceof ProcessingException);
+        }
+    }
+    
+    @Test
     public void testPostBookProcessingException() throws Exception {
         String address = "http://localhost:"; + PORT + "/bookstore/";
         List<Object> providers = new ArrayList<Object>();

Reply via email to