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 16:35:12 UTC

svn commit: r1506578 - /cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java

Author: sergeyb
Date: Wed Jul 24 14:35:11 2013
New Revision: 1506578

URL: http://svn.apache.org/r1506578
Log:
Some ResponseImpl clean up

Modified:
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java

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=1506578&r1=1506577&r2=1506578&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 Wed Jul 24 14:35:11 2013
@@ -325,16 +325,19 @@ public final class ResponseImpl extends 
         checkEntityIsClosed();
         
         if (!hasEntity()) {
-            return null;
+            throw new ProcessingException("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;
@@ -347,36 +350,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 ResponseProcessingException(this, ex);
-                } finally {
-                    closeIfNotBufferred(cls);
+                    throw new ResponseProcessingException(this, ex.getMessage(), ex);    
                 }
             }
         }
+        throw new IllegalStateException("The entity is not backed by an input stream");
         
-        throw new ResponseProcessingException(this, "No Message Body reader is available");
     }
     
-    private void closeIfNotBufferred(Class<?> responseCls) {
-        if (!entityBufferred && !InputStream.class.isAssignableFrom(responseCls)) {
-            close();
-        }
-    }
     
     public boolean bufferEntity() throws ProcessingException {
-        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 ResponseProcessingException(this, ex);
@@ -387,16 +387,15 @@ public final class ResponseImpl extends 
 
     public void close() throws ProcessingException {
         if (!entityClosed) {
-            if (entity instanceof InputStream) {
+            if (!entityBufferred && entity instanceof InputStream) {
                 try {
                     ((InputStream)entity).close();
-                    entity = null;
                 } catch (IOException ex) {
                     throw new ResponseProcessingException(this, ex);
                 }
             }
+            entity = null;
             entityClosed = true;
-            
         }
         
     }