[ 
https://issues.apache.org/jira/browse/HTTPCLIENT-2013?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Chanseok Oh reopened HTTPCLIENT-2013:
-------------------------------------

Good. Now it looks like we both understand each other crystal clear with no 
ambiguity:

# It is not that there is a bug in Oracle / OpenJDK that should be fixed. No 
need to file a bug against them.
# The current HttpClient code throws {{ConnectTimeoutException}} (which does 
not extend {{ConnectException}}) after catching {{ConnectException}} from a 
Java runtime if the exception message is {{Connection timed out}}. The behavior 
has been like this for a long time, of course.
# However, unlike above, there is an inconsistency that HttpClient confusingly 
does not throw {{ConnectTimeoutException}} for some {{ConnectionException}} 
coming from a Java runtime whose exception message contains {{Connection timed 
out}}. The behavior has been like this for a long time, of course.

It is up to you to decide whether you will preserve the current behavior to 
leave the current inconsistency for the sake of not trying to break many other 
users depending on the library or you will revisit the whole thing in 5.0 to 
make things right ideally. But I would humbly suggest you resolve this 
inconsistency in 5.0. IMHO, it looks like a bug that should be fixed in an 
ideal world. Whatever you decide, I will reopen the issue for tracking purposes.

> Connect timeout throws HttpHostConnectException (ConnectException) instead of 
> ConnectTimeoutException (IOException)
> -------------------------------------------------------------------------------------------------------------------
>
>                 Key: HTTPCLIENT-2013
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2013
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: HttpClient (classic)
>    Affects Versions: 4.5.9
>         Environment: Linux
> openjdk version "1.8.0_222"
> OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1-b10)
> OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)
>            Reporter: Chanseok Oh
>            Priority: Major
>
> It is obvious from the code in DefaultHttpClientConnectionOperator that it is 
> supposed to throw ConnectTimeoutException in the case of connection timeout:
> {code:java}
> } catch (final ConnectException ex) {
>     if (last) {
>         final String msg = ex.getMessage();
>         throw "Connection timed out".equals(msg)
>                         ? new ConnectTimeoutException(ex, host, addresses)
>                         : new HttpHostConnectException(ex, host, addresses);
>     }
> {code}
> Recently, we've upgraded Apache HttpClient (indirectly through Google HTTP 
> Client), and our production code handling ConnectionException got broken due 
> to DefaultHttpClientConnectionOperator throwing HttpHostConnectException that 
> extends ConnectionException. (OTOH, ConnectTimeoutException is an IOException 
> and not a ConnectionException.)
> Java version:
> {code}
> openjdk version "1.8.0_222"
> OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1-b10)
> OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)
> {code}
> Example code to reproduce:
> {code:java}
> public static void main(String[] args) throws IOException {
>    // example.com is reserved by the DNS standard and will always trigger 
> timeout
>    try (CloseableHttpClient client = HttpClients.createDefault();
>        CloseableHttpResponse response = client.execute(new 
> HttpGet("https://example.com:81";))) {}
> }
> {code}
> It currently throws the other exception HttpHostConnectException rather than 
> the supposed ConnectTimeoutException.
> {code}
> Exception in thread "main" org.apache.http.conn.HttpHostConnectException: 
> Connect to example.com:81 [example.com/93.184.216.34, 
> example.com/2606:2800:220:1:248:1893:25c8:1946] failed: Connection timed out 
> (Connection timed out)
>       at 
> org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:138)
>       at 
> org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:314)
>       at 
> org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:357)
>       at 
> org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:218)
>       at 
> org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:194)
>       at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:85)
>       at 
> org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108)
>       at 
> org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186)
>       at 
> org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
>       at 
> org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106)
>       at com.example.ApacheHttpClient2.main(ApacheHttpClient2.java:13)
> Caused by: java.net.ConnectException: Connection timed out (Connection timed 
> out)
>       at java.net.PlainSocketImpl.socketConnect(Native Method)
>       at 
> java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
>       at 
> java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
>       at 
> java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
>       at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
>       at java.net.Socket.connect(Socket.java:589)
>       at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:666)
>       at 
> org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:251)
>       at 
> org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:118)
>       ... 10 more
> {code}
>  
>  



--
This message was sent by Atlassian Jira
(v8.3.2#803003)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@hc.apache.org
For additional commands, e-mail: dev-h...@hc.apache.org

Reply via email to