What happens if you remove "response.close();" ?

Gary

On Tue, Oct 8, 2024, 4:36 AM Bernhard Fey <bernhard....@realobjects.com>
wrote:

> Hello, I hope this is the right place to report potential bugs.
>
> When updating to version 5.4 our Java 8 tests fail with the following
> exception:
>
> java.lang.UnsupportedOperationException: method is not supported because
> of the TLS half-close policy
>     at sun.security.ssl.SSLSocketImpl.shutdownInput(SSLSocketImpl.java:765)
>     at sun.security.ssl.SSLSocketImpl.shutdownInput(SSLSocketImpl.java:743)
>     at
> org.apache.hc.core5.http.impl.io.BHttpConnectionBase.close(BHttpConnectionBase.java:255)
>     at
> org.apache.hc.core5.http.impl.io.DefaultBHttpClientConnection.close(DefaultBHttpClientConnection.java:71)
>     at org.apache.hc.client5.http.impl.io
> .DefaultManagedHttpClientConnection.close(DefaultManagedHttpClientConnection.java:176)
>     at
> org.apache.hc.core5.pool.PoolEntry.discardConnection(PoolEntry.java:180)
>     at
> org.apache.hc.core5.pool.StrictConnPool$PerRoutePool.shutdown(StrictConnPool.java:839)
>     at
> org.apache.hc.core5.pool.StrictConnPool.close(StrictConnPool.java:142)
>     at org.apache.hc.client5.http.impl.io
> .PoolingHttpClientConnectionManager.close(PoolingHttpClientConnectionManager.java:277)
>     at
> org.apache.hc.client5.http.impl.classic.InternalHttpClient.close(InternalHttpClient.java:198)
>     at
> org.apache.hc.client5.http.impl.classic.InternalHttpClient.close(InternalHttpClient.java:188)
>     at J8HttpsErrorTest.main(J8HttpsErrorTest.java:21)
>
> It seems to be a bug, but please let me know if it is a mistake on our
> side.
>
> I have put together the following test class, which fails in Java 8 with
> the above exception, but finishes correctly with Java 11
> (tested on Windows 10, but the Java 8 exception also occurs on Linux in
> our integration):
>
> import org.apache.hc.client5.http.classic.methods.HttpGet;
> import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
> import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
> public class J8HttpsErrorTest {
>     public static void main(String[] args) {
>         System.out.println(System.getProperty("java.vm.vendor")
>                    + " " + System.getProperty("java.vm.name")
>                    + " " + System.getProperty("java.vm.version"));
>         try {
>             CloseableHttpClient client =
> HttpClientBuilder.create().build();
>             String responseStr = client.execute(new HttpGet(
> https://www.google.com/), response -> {
>                 byte[] content = new byte[1024];
>                 int length =
> response.getEntity().getContent().read(content); // just read the first
> view bytes to show the connection works
>                 String str = new String(content, 0, length);
>                 response.close();
>                 return str;
>             });
>             System.out.println("Sucessfully loaded: " +
> responseStr.replaceAll(file://s, " "));
>             System.out.println(">>>");
>             client.close(); // this causes the
> ExceUnsupportedOperationExceptionption in Java 8
>             System.out.println("<<<"); // <== success expected, except for
> Java 8
>         } catch (UnsupportedOperationException e) {
>             System.out.println("!!!");
>             e.printStackTrace(System.out); // <== exception expected for
> Java 8
>         } catch (Throwable e) {
>             System.out.println("!!!!!");
>             e.printStackTrace(System.out); // unexpected!
>         }
>     }
> }
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org
> For additional commands, e-mail: httpclient-users-h...@hc.apache.org
>
>

Reply via email to