On Thu, 14 Jan 2021 02:25:25 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: > > Use HttpServerAdapters in StreamCloseTest.java The updated test looks good. I ran the httpclient tests ~200 times on all platform and the new test didn't fail. Please integrate and I will sponsor (if you need a sponsor?). ------------- Marked as reviewed by dfuchs (Reviewer). PR: https://git.openjdk.java.net/jdk/pull/1614