You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by Laura Werner <la...@lwerner.org> on 2003/05/02 03:25:56 UTC

PATCH: Allow custom HttpState in HttpClient.executeMethod

Hi all,

I just finished an initial conversion of our project to use the latest 
CVS Head of httpclient.  (Gotta love eclipse!)  It went pretty smoothly, 
and the improvements in httpclient (and my understanding of it) made our 
code a lot cleaner.  As I work through this, I'm going to suggest a few 
patches for consideration. 

Patch #1 adds an override of HttpClient.executeMethod that lets the 
caller specify an HttpState object.  This allows advanced clients that 
need to mess around with the http state (e.g. different cookies for 
different threads) to use HttpClient rather than manipulating 
connections and connection managers directly.  As more functionality 
gets moved from HttpMethodBase into HttpClient (e.g. redirects), I think 
this is going to be extremely important.

Here's the patch.  I'm just pasting it here inline since it's so small....

Laura Werner
BeVocal

Index: src/java/org/apache/commons/httpclient/HttpClient.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpClient.java,v
retrieving revision 1.73
diff -u -r1.73 HttpClient.java
--- src/java/org/apache/commons/httpclient/HttpClient.java    10 Apr 
2003 21:01:00 -0000    1.73
+++ src/java/org/apache/commons/httpclient/HttpClient.java    2 May 2003 
01:23:35 -0000
@@ -503,11 +503,34 @@
        
     }
    
+    /**
+     * Executes the given method.
+     *
+     * @param hostConfiguration The configuration to use.
+     * @param method the {@link HttpMethod} to execute.
+     * @return the method's response code
+     *
+     * @throws IOException if an I/O error occurs
+     * @throws HttpException if a protocol exception occurs
+     * @since 2.0
+     */
+    public int executeMethod(HostConfiguration hostConfiguration,
+        HttpMethod method)
+        throws IOException, HttpException  {
+           
+            LOG.trace("enter 
HttpClient.executeMethod(HostConfiguration,HttpMethod)");
+           
+            return executeMethod(hostConfiguration, method, null);       
+    }
+   
     /**
      * Executes the given method.
      *
      * @param hostConfiguration The configuration to use.
      * @param method the {@link HttpMethod} to execute.
+     * @param state the {@link HttpState} to use when executing the method.
+     * If <code>null</code>, the state returned by {@link #getState} 
will be used instead.
+     *
      * @return the method's response code
      *
      * @throws IOException if an I/O error occurs
@@ -515,10 +538,10 @@
      * @since 2.0
      */
     public int executeMethod(HostConfiguration hostConfiguration,
-        HttpMethod method)
+        HttpMethod method, HttpState state)
         throws IOException, HttpException  {
            
-        LOG.trace("enter 
HttpClient.executeMethod(HostConfiguration,HttpMethod)");
+        LOG.trace("enter 
HttpClient.executeMethod(HostConfiguration,HttpMethod,HttpState)");
 
         if (null == method) {
             throw new NullPointerException("HttpMethod parameter");
@@ -528,7 +551,6 @@
         boolean strictMode = false;
         int connectionTimeout = 0;
         long httpConnectionTimeout = 0;
-        HttpState state = null;
         HostConfiguration defaultHostConfiguration = null;
 
         /* access all synchronized data in a single block, this will 
keeps us
@@ -540,7 +562,9 @@
             strictMode = this.strictMode;
             connectionTimeout = this.connectionTimeout;
             httpConnectionTimeout = this.httpConnectionTimeout;
-            state = getState();
+            if (state == null) {
+                state = getState();
+            }
             defaultHostConfiguration = getHostConfiguration();
         }
 



Re: PATCH: Allow custom HttpState in HttpClient.executeMethod

Posted by Laura Werner <la...@lwerner.org>.
Thanks, Oleg!  Good catch on the exception.  (er, so to speak.)

-- Laura

Oleg Kalnichevski wrote:

>Folks,
>In my opinion the patch is good to be committed. If nobody complains
>loudly I'll commit it sometime this weekend. I just would use
>IllegalArgumentException instead of NullPointerException to be
>consistent with the programming practices used throughout HttpClient,
>but that has nothing to do with Laura's patch. It just caught my
>attention.
>
>Oleg
>
>  
>



Re: PATCH: Allow custom HttpState in HttpClient.executeMethod

Posted by Oleg Kalnichevski <o....@dplanet.ch>.
Folks,
In my opinion the patch is good to be committed. If nobody complains
loudly I'll commit it sometime this weekend. I just would use
IllegalArgumentException instead of NullPointerException to be
consistent with the programming practices used throughout HttpClient,
but that has nothing to do with Laura's patch. It just caught my
attention.

Oleg

On Fri, 2003-05-02 at 03:25, Laura Werner wrote:
> Hi all,
> 
> I just finished an initial conversion of our project to use the latest 
> CVS Head of httpclient.  (Gotta love eclipse!)  It went pretty smoothly, 
> and the improvements in httpclient (and my understanding of it) made our 
> code a lot cleaner.  As I work through this, I'm going to suggest a few 
> patches for consideration. 
> 
> Patch #1 adds an override of HttpClient.executeMethod that lets the 
> caller specify an HttpState object.  This allows advanced clients that 
> need to mess around with the http state (e.g. different cookies for 
> different threads) to use HttpClient rather than manipulating 
> connections and connection managers directly.  As more functionality 
> gets moved from HttpMethodBase into HttpClient (e.g. redirects), I think 
> this is going to be extremely important.
> 
> Here's the patch.  I'm just pasting it here inline since it's so small....
> 
> Laura Werner
> BeVocal
> 
> Index: src/java/org/apache/commons/httpclient/HttpClient.java
> ===================================================================
> RCS file: 
> /home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpClient.java,v
> retrieving revision 1.73
> diff -u -r1.73 HttpClient.java
> --- src/java/org/apache/commons/httpclient/HttpClient.java    10 Apr 
> 2003 21:01:00 -0000    1.73
> +++ src/java/org/apache/commons/httpclient/HttpClient.java    2 May 2003 
> 01:23:35 -0000
> @@ -503,11 +503,34 @@
>         
>      }
>     
> +    /**
> +     * Executes the given method.
> +     *
> +     * @param hostConfiguration The configuration to use.
> +     * @param method the {@link HttpMethod} to execute.
> +     * @return the method's response code
> +     *
> +     * @throws IOException if an I/O error occurs
> +     * @throws HttpException if a protocol exception occurs
> +     * @since 2.0
> +     */
> +    public int executeMethod(HostConfiguration hostConfiguration,
> +        HttpMethod method)
> +        throws IOException, HttpException  {
> +           
> +            LOG.trace("enter 
> HttpClient.executeMethod(HostConfiguration,HttpMethod)");
> +           
> +            return executeMethod(hostConfiguration, method, null);       
> +    }
> +   
>      /**
>       * Executes the given method.
>       *
>       * @param hostConfiguration The configuration to use.
>       * @param method the {@link HttpMethod} to execute.
> +     * @param state the {@link HttpState} to use when executing the method.
> +     * If <code>null</code>, the state returned by {@link #getState} 
> will be used instead.
> +     *
>       * @return the method's response code
>       *
>       * @throws IOException if an I/O error occurs
> @@ -515,10 +538,10 @@
>       * @since 2.0
>       */
>      public int executeMethod(HostConfiguration hostConfiguration,
> -        HttpMethod method)
> +        HttpMethod method, HttpState state)
>          throws IOException, HttpException  {
>             
> -        LOG.trace("enter 
> HttpClient.executeMethod(HostConfiguration,HttpMethod)");
> +        LOG.trace("enter 
> HttpClient.executeMethod(HostConfiguration,HttpMethod,HttpState)");
>  
>          if (null == method) {
>              throw new NullPointerException("HttpMethod parameter");
> @@ -528,7 +551,6 @@
>          boolean strictMode = false;
>          int connectionTimeout = 0;
>          long httpConnectionTimeout = 0;
> -        HttpState state = null;
>          HostConfiguration defaultHostConfiguration = null;
>  
>          /* access all synchronized data in a single block, this will 
> keeps us
> @@ -540,7 +562,9 @@
>              strictMode = this.strictMode;
>              connectionTimeout = this.connectionTimeout;
>              httpConnectionTimeout = this.httpConnectionTimeout;
> -            state = getState();
> +            if (state == null) {
> +                state = getState();
> +            }
>              defaultHostConfiguration = getHostConfiguration();
>          }
>  
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: commons-httpclient-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: commons-httpclient-dev-help@jakarta.apache.org
> 


Re: PATCH: Allow custom HttpState in HttpClient.executeMethod

Posted by Oleg Kalnichevski <o....@dplanet.ch>.
Patch committed.

Oleg

On Fri, 2003-05-02 at 03:25, Laura Werner wrote:
> Hi all,
> 
> I just finished an initial conversion of our project to use the latest 
> CVS Head of httpclient.  (Gotta love eclipse!)  It went pretty smoothly, 
> and the improvements in httpclient (and my understanding of it) made our 
> code a lot cleaner.  As I work through this, I'm going to suggest a few 
> patches for consideration. 
> 
> Patch #1 adds an override of HttpClient.executeMethod that lets the 
> caller specify an HttpState object.  This allows advanced clients that 
> need to mess around with the http state (e.g. different cookies for 
> different threads) to use HttpClient rather than manipulating 
> connections and connection managers directly.  As more functionality 
> gets moved from HttpMethodBase into HttpClient (e.g. redirects), I think 
> this is going to be extremely important.
> 
> Here's the patch.  I'm just pasting it here inline since it's so small....
> 
> Laura Werner
> BeVocal
> 
> Index: src/java/org/apache/commons/httpclient/HttpClient.java
> ===================================================================
> RCS file: 
> /home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpClient.java,v
> retrieving revision 1.73
> diff -u -r1.73 HttpClient.java
> --- src/java/org/apache/commons/httpclient/HttpClient.java    10 Apr 
> 2003 21:01:00 -0000    1.73
> +++ src/java/org/apache/commons/httpclient/HttpClient.java    2 May 2003 
> 01:23:35 -0000
> @@ -503,11 +503,34 @@
>         
>      }
>     
> +    /**
> +     * Executes the given method.
> +     *
> +     * @param hostConfiguration The configuration to use.
> +     * @param method the {@link HttpMethod} to execute.
> +     * @return the method's response code
> +     *
> +     * @throws IOException if an I/O error occurs
> +     * @throws HttpException if a protocol exception occurs
> +     * @since 2.0
> +     */
> +    public int executeMethod(HostConfiguration hostConfiguration,
> +        HttpMethod method)
> +        throws IOException, HttpException  {
> +           
> +            LOG.trace("enter 
> HttpClient.executeMethod(HostConfiguration,HttpMethod)");
> +           
> +            return executeMethod(hostConfiguration, method, null);       
> +    }
> +   
>      /**
>       * Executes the given method.
>       *
>       * @param hostConfiguration The configuration to use.
>       * @param method the {@link HttpMethod} to execute.
> +     * @param state the {@link HttpState} to use when executing the method.
> +     * If <code>null</code>, the state returned by {@link #getState} 
> will be used instead.
> +     *
>       * @return the method's response code
>       *
>       * @throws IOException if an I/O error occurs
> @@ -515,10 +538,10 @@
>       * @since 2.0
>       */
>      public int executeMethod(HostConfiguration hostConfiguration,
> -        HttpMethod method)
> +        HttpMethod method, HttpState state)
>          throws IOException, HttpException  {
>             
> -        LOG.trace("enter 
> HttpClient.executeMethod(HostConfiguration,HttpMethod)");
> +        LOG.trace("enter 
> HttpClient.executeMethod(HostConfiguration,HttpMethod,HttpState)");
>  
>          if (null == method) {
>              throw new NullPointerException("HttpMethod parameter");
> @@ -528,7 +551,6 @@
>          boolean strictMode = false;
>          int connectionTimeout = 0;
>          long httpConnectionTimeout = 0;
> -        HttpState state = null;
>          HostConfiguration defaultHostConfiguration = null;
>  
>          /* access all synchronized data in a single block, this will 
> keeps us
> @@ -540,7 +562,9 @@
>              strictMode = this.strictMode;
>              connectionTimeout = this.connectionTimeout;
>              httpConnectionTimeout = this.httpConnectionTimeout;
> -            state = getState();
> +            if (state == null) {
> +                state = getState();
> +            }
>              defaultHostConfiguration = getHostConfiguration();
>          }
>  
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: commons-httpclient-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: commons-httpclient-dev-help@jakarta.apache.org
>