> `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 ------------- Changes: - all: https://git.openjdk.java.net/jdk/pull/1614/files - new: https://git.openjdk.java.net/jdk/pull/1614/files/95badebc..a081290f Webrevs: - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=1614&range=04 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=1614&range=03-04 Stats: 45 lines in 1 file changed: 9 ins; 25 del; 11 mod Patch: https://git.openjdk.java.net/jdk/pull/1614.diff Fetch: git fetch https://git.openjdk.java.net/jdk pull/1614/head:pull/1614 PR: https://git.openjdk.java.net/jdk/pull/1614