You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wink.apache.org by bl...@apache.org on 2010/03/01 02:47:39 UTC

svn commit: r917351 - in /incubator/wink/trunk/wink-common/src: main/java/org/apache/wink/common/internal/providers/entity/ test/java/org/apache/wink/common/internal/providers/entity/

Author: bluk
Date: Mon Mar  1 01:47:39 2010
New Revision: 917351

URL: http://svn.apache.org/viewvc?rev=917351&view=rev
Log:
Wrap stream closing in finally blocks to make sure

Added:
    incubator/wink/trunk/wink-common/src/test/java/org/apache/wink/common/internal/providers/entity/InputStreamReaderTest.java
      - copied, changed from r917292, incubator/wink/trunk/wink-common/src/test/java/org/apache/wink/common/internal/providers/entity/ReaderProviderTest.java
Modified:
    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/FileProvider.java
    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/InputStreamProvider.java
    incubator/wink/trunk/wink-common/src/test/java/org/apache/wink/common/internal/providers/entity/ReaderProviderTest.java

Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/FileProvider.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/FileProvider.java?rev=917351&r1=917350&r2=917351&view=diff
==============================================================================
--- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/FileProvider.java (original)
+++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/FileProvider.java Mon Mar  1 01:47:39 2010
@@ -75,13 +75,15 @@
                         MultivaluedMap<String, Object> httpHeaders,
                         OutputStream entityStream) throws IOException, WebApplicationException {
         if (!t.canRead() || t.isDirectory()) {
-            logger.warn(Messages.getMessage("cannotUseFileAsResponse"),
-                        t.getAbsoluteFile());
+            logger.warn(Messages.getMessage("cannotUseFileAsResponse"), t.getAbsoluteFile());
             throw new WebApplicationException();
         } else {
             FileInputStream fis = new FileInputStream(t);
-            pipe(fis, entityStream);
-            fis.close();
+            try {
+                pipe(fis, entityStream);
+            } finally {
+                fis.close();
+            }
         }
 
     }
@@ -112,9 +114,13 @@
             }
         }
         File f = File.createTempFile(prefix, suffix, dir);
+
         FileOutputStream fos = new FileOutputStream(f);
-        pipe(entityStream, fos);
-        fos.close();
+        try {
+            pipe(entityStream, fos);
+        } finally {
+            fos.close();
+        }
         return f;
     }
 

Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/InputStreamProvider.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/InputStreamProvider.java?rev=917351&r1=917350&r2=917351&view=diff
==============================================================================
--- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/InputStreamProvider.java (original)
+++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/InputStreamProvider.java Mon Mar  1 01:47:39 2010
@@ -81,7 +81,11 @@
                         MediaType mediaType,
                         MultivaluedMap<String, Object> httpHeaders,
                         OutputStream entityStream) throws IOException, WebApplicationException {
-        ProviderUtils.copyStream(t, entityStream);
+        try {
+            ProviderUtils.copyStream(t, entityStream);
+        } finally {
+            t.close();
+        }
     }
 
 }

Copied: incubator/wink/trunk/wink-common/src/test/java/org/apache/wink/common/internal/providers/entity/InputStreamReaderTest.java (from r917292, incubator/wink/trunk/wink-common/src/test/java/org/apache/wink/common/internal/providers/entity/ReaderProviderTest.java)
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/test/java/org/apache/wink/common/internal/providers/entity/InputStreamReaderTest.java?p2=incubator/wink/trunk/wink-common/src/test/java/org/apache/wink/common/internal/providers/entity/InputStreamReaderTest.java&p1=incubator/wink/trunk/wink-common/src/test/java/org/apache/wink/common/internal/providers/entity/ReaderProviderTest.java&r1=917292&r2=917351&rev=917351&view=diff
==============================================================================
--- incubator/wink/trunk/wink-common/src/test/java/org/apache/wink/common/internal/providers/entity/ReaderProviderTest.java (original)
+++ incubator/wink/trunk/wink-common/src/test/java/org/apache/wink/common/internal/providers/entity/InputStreamReaderTest.java Mon Mar  1 01:47:39 2010
@@ -17,55 +17,58 @@
  *  under the License.
  *  
  *******************************************************************************/
+
 package org.apache.wink.common.internal.providers.entity;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
 import java.io.BufferedReader;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
-import java.io.Reader;
-import java.io.StringReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.io.UnsupportedEncodingException;
 
 import javax.ws.rs.core.MediaType;
-import static org.junit.Assert.*;
 
-import org.apache.wink.common.internal.providers.entity.ReaderProvider;
 import org.junit.Test;
 
-public class ReaderProviderTest {
+public class InputStreamReaderTest {
 
     private static String message =
                                       "The two most common elements in the world are hydrogen and stupidity";
 
     @Test
-    public void testMessageReader() {
+    public void testMessageInputStream() {
 
         // Entity Input Stream
         ByteArrayInputStream bais = new ByteArrayInputStream(message.getBytes());
 
         // Entity Stream to be read with ReaderProvider
-        ReaderProvider rp = new ReaderProvider();
+        InputStreamProvider ip = new InputStreamProvider();
 
         // Check if readable - assert true
-        assertTrue(rp.isReadable(Reader.class, null, null, null));
-        assertTrue(rp.isReadable(Object.class, null, null, null));
+        assertTrue(ip.isReadable(InputStream.class, null, null, null));
+        assertTrue(ip.isReadable(Object.class, null, null, null));
         // Check if readable - assert false
-        assertFalse(rp.isReadable(StringReader.class, null, null, null));
-        assertFalse(" Reading from String.class is not supported", rp.isReadable(String.class,
+        assertFalse(ip.isReadable(ByteArrayInputStream.class, null, null, null));
+        assertFalse(" Reading from String.class is not supported", ip.isReadable(String.class,
                                                                                  null,
                                                                                  null,
                                                                                  null));
 
-        Reader reader = null;
+        InputStream istream = null;
         try {
             // Read Entity
-            reader = rp.readFrom(null, null, null, MediaType.WILDCARD_TYPE, null, bais);
+            istream = ip.readFrom(null, null, null, MediaType.WILDCARD_TYPE, null, bais);
         } catch (IOException e) {
             assertFalse(" Failed to read Entity", true);
         }
 
-        BufferedReader sr = new BufferedReader(reader);
+        BufferedReader sr = new BufferedReader(new InputStreamReader(istream));
         char[] cbuf = new char[message.length()];
         try {
             sr.read(cbuf);
@@ -83,25 +86,81 @@
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
 
         // Entity Stream to be read with ReaderProvider
-        ReaderProvider rp = new ReaderProvider();
+        InputStreamProvider ip = new InputStreamProvider();
+
+        // Check if writable
+        assertTrue(ip.isWriteable(ByteArrayInputStream.class, null, null, null));
+        // Check if readable - assert false
+        assertFalse(" Writting from String.class is not supported", ip.isWriteable(String.class,
+                                                                                   null,
+                                                                                   null,
+                                                                                   null));
+
+        try {
+            ip.writeTo(new ByteArrayInputStream(message.getBytes()),
+                       null,
+                       null,
+                       null,
+                       MediaType.WILDCARD_TYPE,
+                       null,
+                       baos);
+        } catch (IOException e) {
+            assertFalse(" Failed to write Entity", true);
+        }
+
+        assertEquals(message, new String(baos.toByteArray()));
+    }
+
+    public static class MyStream extends InputStream {
+
+        public MyStream(ByteArrayInputStream istream) {
+            this.istream = istream;
+        }
+
+        final private InputStream istream;
+        private boolean           closed = false;
+
+        @Override
+        public void close() throws IOException {
+            closed = true;
+            istream.close();
+        }
+
+        public boolean calledClose() {
+            return closed;
+        }
+
+        @Override
+        public int read() throws IOException {
+            return istream.read();
+        }
+    }
+
+    @Test
+    public void testMessageWriterClose() throws UnsupportedEncodingException {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+        // Entity Stream to be read with ReaderProvider
+        InputStreamProvider ip = new InputStreamProvider();
 
         // Check if writable
-        assertTrue(rp.isWriteable(StringReader.class, null, null, null));
+        assertTrue(ip.isWriteable(MyStream.class, null, null, null));
         // Check if readable - assert false
-        assertFalse(" Writting from String.class is not supported", rp.isWriteable(String.class,
+        assertFalse(" Writting from String.class is not supported", ip.isWriteable(String.class,
                                                                                    null,
                                                                                    null,
                                                                                    null));
 
-        StringReader reader = new StringReader(message);
+        MyStream istream = new MyStream(new ByteArrayInputStream(message.getBytes()));
 
         try {
-            rp.writeTo(reader, null, null, null, MediaType.WILDCARD_TYPE, null, baos);
+            ip.writeTo(istream, null, null, null, MediaType.WILDCARD_TYPE, null, baos);
         } catch (IOException e) {
             assertFalse(" Failed to write Entity", true);
         }
 
         assertEquals(message, new String(baos.toByteArray()));
+        assertTrue(istream.calledClose());
     }
 
 }

Modified: incubator/wink/trunk/wink-common/src/test/java/org/apache/wink/common/internal/providers/entity/ReaderProviderTest.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/test/java/org/apache/wink/common/internal/providers/entity/ReaderProviderTest.java?rev=917351&r1=917350&r2=917351&view=diff
==============================================================================
--- incubator/wink/trunk/wink-common/src/test/java/org/apache/wink/common/internal/providers/entity/ReaderProviderTest.java (original)
+++ incubator/wink/trunk/wink-common/src/test/java/org/apache/wink/common/internal/providers/entity/ReaderProviderTest.java Mon Mar  1 01:47:39 2010
@@ -104,4 +104,56 @@
         assertEquals(message, new String(baos.toByteArray()));
     }
 
+    public static class MyReader extends Reader {
+
+        public MyReader(StringReader reader) {
+            this.reader = reader;
+        }
+
+        final private Reader reader;
+        private boolean      closed = false;
+
+        @Override
+        public void close() throws IOException {
+            closed = true;
+            reader.close();
+        }
+
+        @Override
+        public int read(char[] cbuf, int off, int len) throws IOException {
+            return reader.read(cbuf, off, len);
+        }
+
+        public boolean calledClose() {
+            return closed;
+        }
+    }
+
+    @Test
+    public void testMessageWriterClose() throws UnsupportedEncodingException {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+        // Entity Stream to be read with ReaderProvider
+        ReaderProvider rp = new ReaderProvider();
+
+        // Check if writable
+        assertTrue(rp.isWriteable(MyReader.class, null, null, null));
+        // Check if readable - assert false
+        assertFalse(" Writting from String.class is not supported", rp.isWriteable(String.class,
+                                                                                   null,
+                                                                                   null,
+                                                                                   null));
+
+        MyReader reader = new MyReader(new StringReader(message));
+
+        try {
+            rp.writeTo(reader, null, null, null, MediaType.WILDCARD_TYPE, null, baos);
+        } catch (IOException e) {
+            assertFalse(" Failed to write Entity", true);
+        }
+
+        assertEquals(message, new String(baos.toByteArray()));
+        assertTrue(reader.calledClose());
+    }
+
 }