[ 
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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to