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