Author: sergeyb
Date: Sun May 12 16:55:48 2013
New Revision: 1481604

URL: http://svn.apache.org/r1481604
Log:
[CXF-5007] Response needs to unwrap GenericEntity in getEntity

Modified:
    
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/AbstractResponseContextImpl.java
    
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ContainerResponseContextImpl.java
    
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java
    
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
    
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
    
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseImplTest.java
    
cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientResponseContextImpl.java
    
cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientResponseFilterInterceptor.java

Modified: 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/AbstractResponseContextImpl.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/AbstractResponseContextImpl.java?rev=1481604&r1=1481603&r2=1481604&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/AbstractResponseContextImpl.java
 (original)
+++ 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/AbstractResponseContextImpl.java
 Sun May 12 16:55:48 2013
@@ -32,18 +32,16 @@ import javax.ws.rs.core.Link.Builder;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.core.NewCookie;
-import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.StatusType;
 
-import org.apache.cxf.jaxrs.utils.InjectionUtils;
 import org.apache.cxf.message.Message;
 
 
 public abstract class AbstractResponseContextImpl {
 
     protected Message m;
-    protected Response r;
-    public AbstractResponseContextImpl(Response r, Message m) {
+    protected ResponseImpl r;
+    public AbstractResponseContextImpl(ResponseImpl r, Message m) {
         this.m = m;
         this.r = r;
     }
@@ -61,7 +59,7 @@ public abstract class AbstractResponseCo
     }
 
     public Object getEntity() {
-        return InjectionUtils.getEntity(r.getEntity());
+        return r.getEntity();
     }
 
        

Modified: 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ContainerResponseContextImpl.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ContainerResponseContextImpl.java?rev=1481604&r1=1481603&r2=1481604&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ContainerResponseContextImpl.java
 (original)
+++ 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ContainerResponseContextImpl.java
 Sun May 12 16:55:48 2013
@@ -25,7 +25,6 @@ import java.lang.reflect.Type;
 
 import javax.ws.rs.container.ContainerResponseContext;
 import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.core.Response;
 
 import org.apache.cxf.jaxrs.utils.InjectionUtils;
 import org.apache.cxf.message.Message;
@@ -35,7 +34,7 @@ public class ContainerResponseContextImp
 
     private Method invoked;
     
-    public ContainerResponseContextImpl(Response r, 
+    public ContainerResponseContextImpl(ResponseImpl r, 
                                         Message m,
                                         Method invoked) {
         super(r, m);
@@ -49,13 +48,13 @@ public class ContainerResponseContextImp
 
     @Override
     public Class<?> getEntityClass() {
-        return InjectionUtils.getRawResponseClass(super.r.getEntity());
+        return InjectionUtils.getRawResponseClass(super.r.getActualEntity());
     }
 
     @Override
     public Type getEntityType() {
         return InjectionUtils.getGenericResponseType(invoked, 
-                                              super.r.getEntity(), 
+                                              super.r.getActualEntity(), 
                                               getEntityClass(), 
                                               super.m.getExchange());
     }

Modified: 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java?rev=1481604&r1=1481603&r2=1481604&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java
 (original)
+++ 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java
 Sun May 12 16:55:48 2013
@@ -50,6 +50,7 @@ import javax.ws.rs.ext.ReaderInterceptor
 import org.apache.cxf.helpers.IOUtils;
 import org.apache.cxf.jaxrs.provider.ProviderFactory;
 import org.apache.cxf.jaxrs.utils.HttpUtils;
+import org.apache.cxf.jaxrs.utils.InjectionUtils;
 import org.apache.cxf.jaxrs.utils.JAXRSUtils;
 import org.apache.cxf.message.Message;
 
@@ -124,13 +125,17 @@ public final class ResponseImpl extends 
         };
     }
     
-    public Object getEntity() {
+    public Object getActualEntity() {
         checkEntityIsClosed();
         return entity;
     }
+    
+    public Object getEntity() {
+        return InjectionUtils.getEntity(getActualEntity());
+    }
 
     public boolean hasEntity() {
-        return getEntity() != null;
+        return getActualEntity() != null;
     }
     
     public MultivaluedMap<String, Object> getMetadata() {

Modified: 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java?rev=1481604&r1=1481603&r2=1481604&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
 (original)
+++ 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
 Sun May 12 16:55:48 2013
@@ -149,15 +149,15 @@ public class JAXRSOutInterceptor extends
     @SuppressWarnings("unchecked")
     private void serializeMessage(ServerProviderFactory providerFactory,
                                   Message message, 
-                                  Response response, 
+                                  Response theResponse, 
                                   OperationResourceInfo ori,
                                   boolean firstTry) {
         
-        response = JAXRSUtils.copyResponseIfNeeded(response);
+        ResponseImpl response = 
(ResponseImpl)JAXRSUtils.copyResponseIfNeeded(theResponse);
         
         final Exchange exchange = message.getExchange();
         
-        Object entity = response.getEntity();
+        Object entity = response.getActualEntity();
         if (response.getStatus() == 200 && entity != null && firstTry 
             && ori != null && 
JAXRSUtils.headMethodPossible(ori.getHttpMethod(), 
                 
(String)exchange.getInMessage().get(Message.HTTP_REQUEST_METHOD))) {
@@ -171,7 +171,7 @@ public class JAXRSOutInterceptor extends
         
         Annotation[] annotations = null;
         Annotation[] staticAnns = invoked != null ? invoked.getAnnotations() : 
new Annotation[]{};
-        Annotation[] responseAnns = 
((ResponseImpl)response).getEntityAnnotations();
+        Annotation[] responseAnns = response.getEntityAnnotations();
         if (responseAnns != null) {
             annotations = new Annotation[staticAnns.length + 
responseAnns.length];
             System.arraycopy(staticAnns, 0, annotations, 0, staticAnns.length);
@@ -180,9 +180,8 @@ public class JAXRSOutInterceptor extends
             annotations = staticAnns;
         }
         
-        ((ResponseImpl)response).setStatus(
-            getActualStatus(response.getStatus(), entity));
-        ((ResponseImpl)response).setEntity(entity, annotations);
+        response.setStatus(getActualStatus(response.getStatus(), entity));
+        response.setEntity(entity, annotations);
         
         // Prepare the headers
         MultivaluedMap<String, Object> responseHeaders = 
response.getMetadata();
@@ -213,7 +212,7 @@ public class JAXRSOutInterceptor extends
         }
    
         // Write the entity
-        entity = InjectionUtils.getEntity(response.getEntity());
+        entity = InjectionUtils.getEntity(response.getActualEntity());
         setResponseStatus(message, getActualStatus(response.getStatus(), 
entity));
         if (entity == null) {
             responseHeaders.putSingle(HttpHeaders.CONTENT_LENGTH, "0");
@@ -241,8 +240,8 @@ public class JAXRSOutInterceptor extends
         
         Class<?> targetType = InjectionUtils.getRawResponseClass(entity);
         Type genericType = 
-            InjectionUtils.getGenericResponseType(invoked, 
response.getEntity(), targetType, exchange);
-        annotations = ((ResponseImpl)response).getEntityAnnotations();        
+            InjectionUtils.getGenericResponseType(invoked, 
response.getActualEntity(), targetType, exchange);
+        annotations = response.getEntityAnnotations();        
         
         List<WriterInterceptor> writers = providerFactory
             .createMessageBodyWriterInterceptor(targetType, genericType, 
annotations, responseMediaType, message,

Modified: 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java?rev=1481604&r1=1481603&r2=1481604&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
 (original)
+++ 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
 Sun May 12 16:55:48 2013
@@ -1704,7 +1704,7 @@ public final class JAXRSUtils {
     }
     
     public static void runContainerResponseFilters(ServerProviderFactory pf,
-                                                   Response r,
+                                                   ResponseImpl r,
                                                    Message m, 
                                                    OperationResourceInfo ori,
                                                    Method invoked) throws 
IOException, Throwable {

Modified: 
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseImplTest.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseImplTest.java?rev=1481604&r1=1481603&r2=1481604&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseImplTest.java
 (original)
+++ 
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseImplTest.java
 Sun May 12 16:55:48 2013
@@ -26,6 +26,7 @@ import java.util.Map;
 import java.util.Set;
 
 import javax.ws.rs.core.Application;
+import javax.ws.rs.core.GenericEntity;
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.Link;
 import javax.ws.rs.core.Link.Builder;
@@ -42,6 +43,7 @@ import javax.ws.rs.core.Variant.VariantL
 import javax.ws.rs.ext.RuntimeDelegate;
 import javax.ws.rs.ext.RuntimeDelegate.HeaderDelegate;
 
+import org.apache.cxf.jaxrs.resources.Book;
 import org.apache.cxf.jaxrs.utils.HttpUtils;
 
 import org.junit.Assert;
@@ -87,6 +89,23 @@ public class ResponseImplTest extends As
         assertFalse(new ResponseImpl(200).hasEntity());
     }
     
+    @Test
+    public void testGetEntityUnwrapped() {
+        final Book book = new Book();
+        Response r = Response.ok().entity(
+            new GenericEntity<Book>(book) {
+            }
+        ).build();
+        assertSame(book, r.getEntity());
+    }
+    
+    @Test
+    public void testGetEntity() {
+        final Book book = new Book();
+        Response r = Response.ok().entity(book).build();
+        assertSame(book, r.getEntity());
+    }
+    
     @Test(expected = IllegalStateException.class)
     public void testGetEntityAfterClose() {
         Response response = Response.ok("entity").build();

Modified: 
cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientResponseContextImpl.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientResponseContextImpl.java?rev=1481604&r1=1481603&r2=1481604&view=diff
==============================================================================
--- 
cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientResponseContextImpl.java
 (original)
+++ 
cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientResponseContextImpl.java
 Sun May 12 16:55:48 2013
@@ -24,16 +24,16 @@ import java.util.Map;
 
 import javax.ws.rs.client.ClientResponseContext;
 import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.core.Response;
 
 import org.apache.cxf.jaxrs.impl.AbstractResponseContextImpl;
 import org.apache.cxf.jaxrs.impl.MetadataMap;
+import org.apache.cxf.jaxrs.impl.ResponseImpl;
 import org.apache.cxf.message.Message;
 
 public class ClientResponseContextImpl extends AbstractResponseContextImpl 
     implements ClientResponseContext {
 
-    public ClientResponseContextImpl(Response r, 
+    public ClientResponseContextImpl(ResponseImpl r, 
                                      Message m) {
         super(r, m);
     }

Modified: 
cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientResponseFilterInterceptor.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientResponseFilterInterceptor.java?rev=1481604&r1=1481603&r2=1481604&view=diff
==============================================================================
--- 
cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientResponseFilterInterceptor.java
 (original)
+++ 
cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientResponseFilterInterceptor.java
 Sun May 12 16:55:48 2013
@@ -33,8 +33,10 @@ import javax.ws.rs.core.Response.Respons
 import org.apache.cxf.interceptor.AbstractInDatabindingInterceptor;
 import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.jaxrs.client.ClientProviderFactory;
+import org.apache.cxf.jaxrs.impl.ResponseImpl;
 import org.apache.cxf.jaxrs.model.ProviderInfo;
 import org.apache.cxf.jaxrs.utils.InjectionUtils;
+import org.apache.cxf.jaxrs.utils.JAXRSUtils;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.Phase;
 
@@ -55,8 +57,9 @@ public class ClientResponseFilterInterce
             ClientRequestContext reqContext = new 
ClientRequestContextImpl(inMessage.getExchange().getInMessage(),
                                                                         true);
             
-            ClientResponseContext respContext = new 
ClientResponseContextImpl(getResponse(inMessage), 
-                                                                              
inMessage);
+            ClientResponseContext respContext = 
+                new 
ClientResponseContextImpl((ResponseImpl)getResponse(inMessage), 
+                                              inMessage);
             for (ProviderInfo<ClientResponseFilter> filter : filters) {
                 InjectionUtils.injectContexts(filter.getProvider(), filter, 
inMessage);
                 try {
@@ -71,9 +74,9 @@ public class ClientResponseFilterInterce
     protected Response getResponse(Message inMessage) {
         Response resp = inMessage.getExchange().get(Response.class);
         if (resp != null) {
-            return resp;
+            return JAXRSUtils.copyResponseIfNeeded(resp);
         }
-        ResponseBuilder rb = 
Response.status((Integer)inMessage.get(Message.RESPONSE_CODE));
+        ResponseBuilder rb = 
JAXRSUtils.toResponseBuilder((Integer)inMessage.get(Message.RESPONSE_CODE));
         rb.entity(inMessage.get(InputStream.class));
         
         @SuppressWarnings("unchecked")


Reply via email to