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());
+ }
+
}