Author: sergeyb
Date: Sat Jun 27 21:11:28 2009
New Revision: 789015

URL: http://svn.apache.org/viewvc?rev=789015&view=rev
Log:
Merged revisions 789013 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/trunk

........
  r789013 | sergeyb | 2009-06-27 21:52:49 +0100 (Sat, 27 Jun 2009) | 1 line
  
  CXF-2322 : applying a patch on behalf of Eamonn Dwyer with minor updates, 
thanks
........

Modified:
    cxf/branches/2.2.x-fixes/   (props changed)
    
cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java
    
cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
    
cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
    
cxf/branches/2.2.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java

Propchange: cxf/branches/2.2.x-fixes/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Jun 27 21:11:28 2009
@@ -1 +1 @@
-/cxf/trunk:782728-782730,783097,783294,783396,784059,784181-784184,784893,784895,785279-785282,785468,785621,785624,785651,785734,785866,786142,786271-786272,786395,786512,786514,786582-786583,786638,786647,786850,787200,787269,787277-787279,787290-787291,787305,787323,787366,787849,788030,788060,788187,788444,788451,788703,788752,788774,788819-788820
+/cxf/trunk:782728-782730,783097,783294,783396,784059,784181-784184,784893,784895,785279-785282,785468,785621,785624,785651,785734,785866,786142,786271-786272,786395,786512,786514,786582-786583,786638,786647,786850,787200,787269,787277-787279,787290-787291,787305,787323,787366,787849,788030,788060,788187,788444,788451,788703,788752,788774,788819-788820,789013

Propchange: cxf/branches/2.2.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: 
cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java
URL: 
http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java?rev=789015&r1=789014&r2=789015&view=diff
==============================================================================
--- 
cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java
 (original)
+++ 
cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java
 Sat Jun 27 21:11:28 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/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
URL: 
http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java?rev=789015&r1=789014&r2=789015&view=diff
==============================================================================
--- 
cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
 (original)
+++ 
cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
 Sat Jun 27 21:11:28 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/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
URL: 
http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java?rev=789015&r1=789014&r2=789015&view=diff
==============================================================================
--- 
cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
 (original)
+++ 
cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
 Sat Jun 27 21:11:28 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/branches/2.2.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java
URL: 
http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java?rev=789015&r1=789014&r2=789015&view=diff
==============================================================================
--- 
cxf/branches/2.2.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java
 (original)
+++ 
cxf/branches/2.2.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java
 Sat Jun 27 21:11:28 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