On Sat, 5 Dec 2020 04:54:27 GMT, Yasumasa Suenaga <ysuen...@openjdk.org> wrote:
>> `InputStream` from `BodyPublishers.ofInputStream()` is usually closed when >> the stream reaches EOF. However IOE handler returns without closing. >> >> I confirmed this problem in `BodyPublishers.ofInputStream()`, but I think >> `BodyPublishers.ofFile()`has same problem because it also use >> `StreamIterator`as well as `ofInputStream()`. >> >> >> # How to reproduce: >> >> Following code (Test.java) attempts to post body from `TestInputStream` >> which throws IOE in `read()`. "close called" is shown on the console if >> `close()` is called. >> >> import java.io.*; >> import java.net.*; >> import java.net.http.*; >> >> public class Test{ >> >> private static class TestInputStream extends InputStream{ >> >> public TestInputStream(){ >> super(); >> System.out.println("test c'tor"); >> } >> >> @Override >> public int read() throws IOException{ >> System.out.println("read called"); >> throw new IOException("test"); >> } >> >> @Override >> public void close() throws IOException{ >> System.out.println("close called"); >> super.close(); >> } >> >> } >> >> public static void main(String[] args) throws Exception{ >> var http = HttpClient.newHttpClient(); >> var request = HttpRequest.newBuilder() >> .uri(URI.create("http://httpbin.org/post")) >> >> .POST(HttpRequest.BodyPublishers.ofInputStream(() -> new TestInputStream())) >> .build(); >> http.send(request, HttpResponse.BodyHandlers.discarding()); >> System.out.println("Press any key to exit..."); >> System.in.read(); >> } >> } > > Yasumasa Suenaga has updated the pull request incrementally with one > additional commit since the last revision: > > Throw UIOE when stream throws IOE test/jdk/java/net/httpclient/StreamCloseTest.java line 37: > 35: * @compile ../../../com/sun/net/httpserver/FileServerHandler.java > 36: * @build jdk.test.lib.net.SimpleSSLContext > 37: * @build LightWeightHttpServer It would be preferable to avoid the use of LightWeightHttpServer in this test. The server-side seems trivial enough to implement locally in the test. ------------- PR: https://git.openjdk.java.net/jdk/pull/1614