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 2013/07/24 19:23:45 UTC

svn commit: r1506633 - in /cxf/branches/2.7.x-fixes: ./ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java

Author: sergeyb
Date: Wed Jul 24 17:23:45 2013
New Revision: 1506633

URL: http://svn.apache.org/r1506633
Log:
Merged revisions 1506578 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/trunk

........
  r1506578 | sergeyb | 2013-07-24 15:35:11 +0100 (Wed, 24 Jul 2013) | 1 line
  
  Some ResponseImpl clean up
........

Modified:
    cxf/branches/2.7.x-fixes/   (props changed)
    cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java

Propchange: cxf/branches/2.7.x-fixes/
------------------------------------------------------------------------------
  Merged /cxf/trunk:r1506578

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

Modified: cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java?rev=1506633&r1=1506632&r2=1506633&view=diff
==============================================================================
--- cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java (original)
+++ cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java Wed Jul 24 17:23:45 2013
@@ -297,16 +297,19 @@ public final class ResponseImpl extends 
         checkEntityIsClosed();
         
         if (!hasEntity()) {
-            return null;
+            throw new MessageProcessingException("Null entity");
         }
         
         if (cls.isAssignableFrom(entity.getClass())) {
-            T response = cls.cast(entity);
-            closeIfNotBufferred(cls);
-            return response;
+            return cls.cast(entity);
         }
-        
-        if (responseMessage != null && entity instanceof InputStream) {
+        if (entity instanceof InputStream) {
+            
+            if (responseMessage == null) {
+                // won't happen, just in case
+                throw new RuntimeException();    
+            }
+            
             MediaType mediaType = getMediaType();
             if (mediaType == null) {
                 mediaType = MediaType.WILDCARD_TYPE;
@@ -318,36 +321,33 @@ public final class ResponseImpl extends 
             if (readers != null) {
                 try {
                     responseMessage.put(Message.PROTOCOL_HEADERS, this.getMetadata());
-                    return cls.cast(JAXRSUtils.readFromMessageBodyReader(readers, cls, t, 
-                                                                anns, 
-                                                                InputStream.class.cast(entity), 
-                                                                mediaType, 
-                                                                responseMessage));
+                    Object newEntity = JAXRSUtils.readFromMessageBodyReader(readers, cls, t, 
+                                                                           anns, 
+                                                                           InputStream.class.cast(entity), 
+                                                                           mediaType, 
+                                                                           responseMessage);
+                    InputStream.class.cast(entity).close();
+                    entity = newEntity;
+                    entityBufferred = true;
+                    
+                    return cls.cast(entity);
                 } catch (Exception ex) {
                     throw new MessageProcessingException(ex);
-                } finally {
-                    closeIfNotBufferred(cls);
                 }
             }
         }
+        throw new IllegalStateException("The entity is not backed by an input stream");
         
-        throw new MessageProcessingException("No Message Body reader is available");
     }
     
-    private void closeIfNotBufferred(Class<?> responseCls) {
-        if (!entityBufferred && !InputStream.class.isAssignableFrom(responseCls)) {
-            close();
-        }
-    }
     
     public boolean bufferEntity() throws MessageProcessingException {
-        if (entityClosed) {
-            throw new IllegalStateException();
-        }
+        checkEntityIsClosed();
         if (!entityBufferred && entity instanceof InputStream) {
             try {
                 InputStream oldEntity = (InputStream)entity;
                 entity = IOUtils.loadIntoBAIS(oldEntity);
+                oldEntity.close();
                 entityBufferred = true;
             } catch (IOException ex) {
                 throw new MessageProcessingException(ex);
@@ -358,16 +358,15 @@ public final class ResponseImpl extends 
 
     public void close() throws MessageProcessingException {
         if (!entityClosed) {
-            if (entity instanceof InputStream) {
+            if (!entityBufferred && entity instanceof InputStream) {
                 try {
                     ((InputStream)entity).close();
-                    entity = null;
                 } catch (IOException ex) {
                     throw new MessageProcessingException(ex);
                 }
             }
+            entity = null;
             entityClosed = true;
-            
         }
         
     }