You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "Oleg Kalnichevski (JIRA)" <ji...@apache.org> on 2009/02/14 17:47:59 UTC
[jira] Resolved: (HTTPCLIENT-813) HttpClient throws NPE on Invalid
Port when used with MultiThreadedHttpConnectionManager
[ https://issues.apache.org/jira/browse/HTTPCLIENT-813?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Oleg Kalnichevski resolved HTTPCLIENT-813.
------------------------------------------
Resolution: Fixed
Fixed in SVN trunk. Please verify.
Oleg
> HttpClient throws NPE on Invalid Port when used with MultiThreadedHttpConnectionManager
> ---------------------------------------------------------------------------------------
>
> Key: HTTPCLIENT-813
> URL: https://issues.apache.org/jira/browse/HTTPCLIENT-813
> Project: HttpComponents HttpClient
> Issue Type: Bug
> Components: HttpClient
> Affects Versions: 3.1 Final
> Environment: Linux AS 3.1/Java 1.5
> Reporter: Zhihong Zhang
> Fix For: 4.0 Beta 3
>
> Attachments: HttpTest.java, HttpTest2.java
>
>
> The HttpClient throws NullPointerException in the main thread when an invalid port (like 80001) is used in the URL. An IllegalArgumentException is thrown in TimeoutGuard thread.
>
> Exception in thread "Timeout guard" java.lang.IllegalArgumentException: port out of range:80001
> at java.net.InetSocketAddress.<init>(InetSocketAddress.java:118)
> at java.net.Socket.<init>(Socket.java:240)
> at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:80)
> at org.apache.commons.httpclient.protocol.ControllerThreadSocketFactory$1.doit(ControllerThreadSocketFactory.java:91)
> at org.apache.commons.httpclient.protocol.ControllerThreadSocketFactory$SocketTask.run(ControllerThreadSocketFactory.java:158)
> at java.lang.Thread.run(Thread.java:613)
> Exception in thread "main" java.lang.NullPointerException
> at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:721)
> at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.open(MultiThreadedHttpConnectionManager.java:1361)
> at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387)
> at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
> at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
> at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
> at com.aol.test.HttpTest$PoolingHttpConnector.doGet(HttpTest.java:47)
> at com.aol.test.HttpTest.main(HttpTest.java:17)
> It should throw a checked exception in main thread so caller can handle the error condition more gracefully.
> The test program is attached. This is caused by a race condition and it's not always reproducible. Running in debugger shows a different behavior.
> package com.aol.test;
> import java.io.IOException;
> import org.apache.commons.httpclient.HttpClient;
> import org.apache.commons.httpclient.HttpStatus;
> import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
> import org.apache.commons.httpclient.methods.GetMethod;
> import org.apache.commons.httpclient.params.HttpConnectionManagerParams;
> public class HttpTest {
>
> public static void main(String[] args) {
> PoolingHttpConnector conn = new PoolingHttpConnector();
>
> try {
> String response = conn.doGet("http://www.aol.com:80001");
> System.out.println("Response='" + response + "'");
> } catch (IOException e) {
> e.printStackTrace();
> }
> }
> static class PoolingHttpConnector {
>
> public static final int MAX_TOTAL_CONNECTIONS = 16;
> public static final int MAX_CONNECTIONS_PER_HOST = 8;
> public static final int CONNECT_TIMEOUT = 5000;
> public static final int SOCKET_TIMEOUT = 5000;
> public static final boolean TCP_NO_DELAY = true;
>
> private static MultiThreadedHttpConnectionManager poolManager;
> private static HttpConnectionManagerParams httpParams;
> private static HttpClient httpClient;
> private static boolean initialized = false;
>
> public PoolingHttpConnector()
> {
> initialize();
> }
> public String doGet(String url) throws IOException {
> GetMethod method = new GetMethod(url);
>
> try {
> int status = httpClient.executeMethod(method);
> String response = new String(method.getResponseBody());
>
> if (status != HttpStatus.SC_OK)
> throw new IOException("HTTP error: " + response);
>
> return response;
>
> } finally {
> method.releaseConnection();
> }
> }
>
> private synchronized void initialize() {
> if (initialized)
> return;
>
> poolManager = new MultiThreadedHttpConnectionManager();
> httpParams = new HttpConnectionManagerParams();
>
> httpParams.setMaxTotalConnections(MAX_TOTAL_CONNECTIONS);
> httpParams.setDefaultMaxConnectionsPerHost(MAX_CONNECTIONS_PER_HOST);
> httpParams.setTcpNoDelay(TCP_NO_DELAY);
> httpParams.setSoTimeout(SOCKET_TIMEOUT);
> httpParams.setConnectionTimeout(CONNECT_TIMEOUT);
>
> poolManager.setParams(httpParams);
> httpClient = new HttpClient(poolManager);
> initialized = true;
> }
>
> }
> }
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org