Author: sergeyb
Date: Sat Jun 27 20:52:49 2009
New Revision: 789013

URL: http://svn.apache.org/viewvc?rev=789013&view=rev
Log:
CXF-2322 : applying a patch on behalf of Eamonn Dwyer with minor updates, thanks

Modified:
    
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java
    
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
    
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
    
cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java

Modified: 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java?rev=789013&r1=789012&r2=789013&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java
 (original)
+++ 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java
 Sat Jun 27 20:52:49 2009
@@ -297,7 +297,7 @@
         currentBuilder = new UriBuilderImpl(uri);
     }
     
-    protected ResponseBuilder setResponseBuilder(HttpURLConnection conn) 
throws Throwable {
+    protected ResponseBuilder setResponseBuilder(HttpURLConnection conn, 
Message inMessage) throws Throwable {
         
         if (conn == null) {
             throw new WebApplicationException(); 
@@ -321,9 +321,13 @@
                 }
             }
         }
+        InputStream mStream = null;
+        if (inMessage != null) {
+            mStream = inMessage.getContent(InputStream.class);
+        }
         if (status >= 400) {
             try {
-                InputStream errorStream = conn.getErrorStream();
+                InputStream errorStream = mStream == null ? 
conn.getErrorStream() : mStream;
                 if (errorStream != null) {
                     
responseBuilder.entity(IOUtils.readStringFromStream(errorStream));
                 }
@@ -332,7 +336,8 @@
             }
         } else {
             try {
-                responseBuilder.entity(conn.getInputStream());
+                InputStream stream = mStream == null ? conn.getInputStream() : 
mStream;
+                responseBuilder.entity(stream);
             } catch (Exception ex) {
                 // it may that the successful response has no response body
             }
@@ -551,7 +556,7 @@
     protected void setInInterceptors(List<Interceptor> interceptors) {
         inInterceptors = interceptors;
     }
-
+    
     protected void setOutInterceptors(List<Interceptor> interceptors) {
         outInterceptors = interceptors;
     }

Modified: 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java?rev=789013&r1=789012&r2=789013&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
 (original)
+++ 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
 Sat Jun 27 20:52:49 2009
@@ -392,11 +392,11 @@
         
     }
     
-    protected Object handleResponse(HttpURLConnection connect, Message 
inMessage, OperationResourceInfo ori) 
+    protected Object handleResponse(HttpURLConnection connect, Message 
outMessage, OperationResourceInfo ori) 
         throws Throwable {
-        Response r = setResponseBuilder(connect).clone().build();
+        Response r = setResponseBuilder(connect, 
outMessage.getExchange().getInMessage()).clone().build();
         Method method = ori.getMethodToInvoke();
-        checkResponse(method, r, inMessage);
+        checkResponse(method, r, outMessage);
         if (method.getReturnType() == Void.class) { 
             return null;
         }
@@ -406,7 +406,7 @@
             return r;
         }
         
-        return readBody(r, connect, inMessage, method.getReturnType(), 
+        return readBody(r, connect, outMessage, method.getReturnType(), 
                         method.getGenericReturnType(), 
method.getDeclaredAnnotations());
     }
 

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=789013&r1=789012&r2=789013&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
 Sat Jun 27 20:52:49 2009
@@ -486,12 +486,12 @@
         return handleResponse(connect, m, responseClass);
     }
     
-    protected Response handleResponse(HttpURLConnection conn, Message m, 
Class<?> responseClass) {
+    protected Response handleResponse(HttpURLConnection conn, Message 
outMessage, Class<?> responseClass) {
         try {
-            ResponseBuilder rb = setResponseBuilder(conn).clone();
+            ResponseBuilder rb = setResponseBuilder(conn, 
outMessage.getExchange().getInMessage()).clone();
             Response currentResponse = rb.clone().build();
             
-            Object entity = readBody(currentResponse, conn, m, responseClass, 
responseClass,
+            Object entity = readBody(currentResponse, conn, outMessage, 
responseClass, responseClass,
                                      new Annotation[]{});
             rb.entity(entity);
             

Modified: 
cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java?rev=789013&r1=789012&r2=789013&view=diff
==============================================================================
--- 
cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java
 (original)
+++ 
cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java
 Sat Jun 27 20:52:49 2009
@@ -19,6 +19,7 @@
 
 package org.apache.cxf.systest.jaxrs;
 
+import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.InputStream;
 import java.net.URL;
@@ -40,13 +41,18 @@
 import org.apache.commons.httpclient.methods.PostMethod;
 import org.apache.commons.httpclient.methods.RequestEntity;
 import org.apache.cxf.helpers.IOUtils;
+import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.io.CachedOutputStream;
 import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
+import org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean;
 import org.apache.cxf.jaxrs.client.ResponseExceptionMapper;
 import org.apache.cxf.jaxrs.client.WebClient;
 import org.apache.cxf.jaxrs.ext.form.Form;
 import org.apache.cxf.jaxrs.ext.xml.XMLSource;
 import org.apache.cxf.jaxrs.impl.MetadataMap;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.phase.Phase;
 import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
 
 import org.junit.BeforeClass;
@@ -160,6 +166,19 @@
         }
     }
     
+    @Test
+    public void testOtherInterceptorDrainingStream() throws Exception {
+
+        String baseAddress = "http://localhost:9092/test/services/rest";;
+        JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean(); 
+        bean.setAddress(baseAddress);
+        bean.getInInterceptors().add(new TestStreamDrainInterptor());
+        WebClient client = bean.createWebClient();
+        client.path("/bookstore/123").accept(MediaType.APPLICATION_XML_TYPE);
+        Book b = client.get(Book.class);
+        assertEquals(123, b.getId());
+        assertEquals("CXF in Action", b.getName());
+    }    
     
     @Test
     public void testGetBookSubresourceClient() throws Exception {
@@ -408,4 +427,30 @@
         }
         
     }
+    
+    @Ignore 
+    public class TestStreamDrainInterptor extends 
AbstractPhaseInterceptor<Message> {
+        public TestStreamDrainInterptor() {
+            super(Phase.RECEIVE);
+        }
+
+        public void handleMessage(Message message) throws Fault {
+            InputStream is = message.getContent(InputStream.class);
+            if (is == null) {
+                return;
+            }
+            byte[] payload;
+            try {
+                // input stream will be closed by readBytesFromStream()
+                payload = IOUtils.readBytesFromStream(is);
+                assertTrue("payload was null", payload != null);
+                assertTrue("payload was EMPTYR", payload.length > 0);
+                message.setContent(InputStream.class, new 
ByteArrayInputStream(payload));
+            } catch (Exception e) {
+                String error = "Failed to read the stream properly due to " + 
e.getMessage();
+                assertFalse(error, e != null);
+            } 
+        }
+
+    }
 }


Reply via email to