HTTPCLIENT-1484: GzipCompressingEntity should not close the underlying output stream if the entity has not been fully written out due to an exception
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1578440 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
09027e7286
commit
68855c40f4
|
@ -4,6 +4,10 @@ Changes for 4.4-alpha1
|
|||
Changelog:
|
||||
-------------------
|
||||
|
||||
* [HTTPCLIENT-1484] GzipCompressingEntity should not close the underlying output stream
|
||||
if the entity has not been fully written out due to an exception.
|
||||
Contributed by Oleg Kalnichevski <olegk at apache.org>
|
||||
|
||||
* [HTTPCLIENT-1474] Fixed broken entity enclosing requests in HC Fluent.
|
||||
Contributed by Oleg Kalnichevski <olegk at apache.org>
|
||||
|
||||
|
|
|
@ -104,11 +104,10 @@ public class GzipCompressingEntity extends HttpEntityWrapper {
|
|||
public void writeTo(final OutputStream outstream) throws IOException {
|
||||
Args.notNull(outstream, "Output stream");
|
||||
final GZIPOutputStream gzip = new GZIPOutputStream(outstream);
|
||||
try {
|
||||
wrappedEntity.writeTo(gzip);
|
||||
} finally {
|
||||
gzip.close();
|
||||
}
|
||||
wrappedEntity.writeTo(gzip);
|
||||
// Only close output stream if the wrapped entity has been
|
||||
// successfully written out
|
||||
gzip.close();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -30,6 +30,7 @@ package org.apache.http.client.entity;
|
|||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
import org.apache.http.Consts;
|
||||
|
@ -41,6 +42,7 @@ import org.apache.http.entity.StringEntity;
|
|||
import org.apache.http.util.EntityUtils;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
public class TestGZip {
|
||||
|
||||
|
@ -93,4 +95,17 @@ public class TestGZip {
|
|||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCompressionIOExceptionLeavesOutputStreamOpen() throws Exception {
|
||||
final HttpEntity in = Mockito.mock(HttpEntity.class);
|
||||
Mockito.doThrow(new IOException("Ooopsie")).when(in).writeTo(Mockito.<OutputStream>any());
|
||||
final GzipCompressingEntity gzipe = new GzipCompressingEntity(in);
|
||||
final OutputStream out = Mockito.mock(OutputStream.class);
|
||||
try {
|
||||
gzipe.writeTo(out);
|
||||
} catch (IOException ex) {
|
||||
Mockito.verify(out, Mockito.never()).close();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue