olegk       2004/09/15 23:23:02

  Modified:    httpclient/xdocs Tag: HTTPCLIENT_2_0_BRANCH tutorial.xml
  Log:
  PR #31180 (HttpClient tutorial update)
  
  Bring the tutorial up to date with the latest best practices
  
  Contributed by Oleg Kalnichevski
  Reviewed by Michael Becke
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.2.2.5   +77 -78    jakarta-commons/httpclient/xdocs/tutorial.xml
  
  Index: tutorial.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/httpclient/xdocs/tutorial.xml,v
  retrieving revision 1.2.2.4
  retrieving revision 1.2.2.5
  diff -u -r1.2.2.4 -r1.2.2.5
  --- tutorial.xml      3 Aug 2004 21:48:24 -0000       1.2.2.4
  +++ tutorial.xml      16 Sep 2004 06:23:01 -0000      1.2.2.5
  @@ -53,12 +53,12 @@
         after the other.  Obviously, if we don't read the entire response to
         the first request, the left over data will get in the way of the second
         response.  <em>HttpClient</em> tries to handle this but to avoid problems it 
is
  -      important to always read the entire response and release the connection.</p>
  +      important to always release the connection.</p> Upon the connection release
  +      HttpClient will do its best to ensure that the connection is reusable.
   
         <div style="font-style: italic; border: 1px solid #888; margin-left: 7px; 
margin-right: 7px; margin-top: 1em; margin-bottom: 1px;">
           <p>
  -          It is important to always read the entire
  -          response and release the connection regardless of whether the server
  +          It is important to always release the connection regardless of whether 
the server
             returned an error or not.
           </p>
         </div>
  @@ -116,28 +116,35 @@
           and can sometimes indicate that further action is required by the
           client such as providing authentication credentials.</p>
   
  +        <subsection name="Method recovery">
  +        <p>Per default HttpClient will automatically attempt to recover from the
  +        not-fatal errors, that is, when HttpRecoverableException is thrown. 
  +        HttpClient will retry the method three times provided that the request
  +        has never been fully transmitted to the target server.</p>
  +
  +        <source><![CDATA[
  +// set per default
  +method.setMethodRetryHandler(new DefaultMethodRetryHandler());]]>
  +        </source>
  +
  +        <p>Default recovery procedure can be replaced with a custom one. The number 
  +         of automatic retries can be increased. HttpClient can also be instructed to
  +         retry the method even though the request may have already been processed 
by 
  +         the server and the I/O exception has occurred while receiving the 
response. 
  +         Please exercise caution when enabling auto-retrial. Use it only if the 
method
  +         is known to be idempotent, that is, it is known to be safe to retry 
multiple 
  +         times without causing data corruption or data inconsistency.</p>
  +        <p>The rule of thumb is GET methods are usually safe unless known 
otherwise, 
  +         entity enclosing methods such as POST and PUT are usually unsafe unless 
known 
  +         otherwise.</p>
  +
           <source><![CDATA[
  -          int statusCode = -1;
  -          // We will retry up to 3 times.
  -          for (int attempt = 0; statusCode == -1 && attempt < 3; attempt++) {
  -              try {
  -                  // execute the method.
  -                  statusCode = client.executeMethod(method);
  -              } catch (HttpRecoverableException e) {
  -                  System.err.println("A recoverable exception occurred,
  -                  retrying.  " + e.getMessage());
  -              } catch (IOException e) {
  -                  System.err.println("Failed to download file.");
  -                  e.printStackTrace();
  -                  System.exit(-1);
  -              }
  -          }
  -          // Check that we didn't run out of retries.
  -          if (statusCode == -1) {
  -              System.err.println("Failed to recover from exception.");
  -              System.exit(-2);
  -          }]]>
  +DefaultMethodRetryHandler retryhandler = new DefaultMethodRetryHandler();
  +retryhandler.setRequestSentRetryEnabled(true);
  +retryhandler.setRetryCount(5);
  +method.setMethodRetryHandler(retryhandler);]]>
           </source>
  +        </subsection>
       </section> 
   
       <section name="Read the Response">
  @@ -193,61 +200,53 @@
         the program below.</p>
   
         <source><![CDATA[
  -        import org.apache.commons.httpclient.*;
  -        import org.apache.commons.httpclient.methods.*;
  -        import java.io.*;
  -
  -        public class HttpClientTutorial {
  -          
  -          private static String url = "http://www.apache.org/";;
  +import org.apache.commons.httpclient.*;
  +import org.apache.commons.httpclient.methods.*;
  +import java.io.*;
  +
  +public class HttpClientTutorial {
  +  
  +  private static String url = "http://www.apache.org/";;
  +
  +  public static void main(String[] args) {
  +    // Create an instance of HttpClient.
  +    HttpClient client = new HttpClient();
   
  -          public static void main(String[] args) {
  -            // Create an instance of HttpClient.
  -            HttpClient client = new HttpClient();
  -
  -            // Create a method instance.
  -            HttpMethod method = new GetMethod(url);
  -            
  -            try {
  -              // Execute the method.
  -              int statusCode = -1;
  -              byte[] responseBody = null;
  -              // We will retry up to 3 times.
  -              for (int attempt = 0; statusCode == -1 && attempt < 3; attempt++) {
  -                try {
  -                  // execute the method.
  -                  statusCode = client.executeMethod(method);
  -                } catch (HttpRecoverableException e) {
  -                  System.err.println(
  -                    "A recoverable exception occurred, retrying." + 
  -                    e.getMessage());
  -                } catch (IOException e) {
  -                  System.err.println("Failed to download file.");
  -                  e.printStackTrace();
  -                  System.exit(-1);
  -                }
  -              }
  -              // Check that we didn't run out of retries.
  -              if (statusCode == -1) {
  -                System.err.println("Failed to recover from exception.");
  -                System.exit(-2);
  -              }
  -
  -              // Read the response body.
  -              responseBody = method.getResponseBody();
  -
  -            } finally {
  -              // Release the connection.
  -              method.releaseConnection();
  -            }
  -
  -            // Deal with the response.
  -            // Use caution: ensure correct character encoding and is not binary data
  -            System.err.println(new String(responseBody));
  -
  -          }
  -        }
  -      ]]></source>
  +    // Create a method instance.
  +    GetMethod method = new GetMethod(url);
  +    
  +    // Provide custom retry handler is necessary
  +    DefaultMethodRetryHandler retryhandler = new DefaultMethodRetryHandler();
  +    retryhandler.setRequestSentRetryEnabled(false);
  +    retryhandler.setRetryCount(3);
  +    method.setMethodRetryHandler(retryhandler);
  +
  +    try {
  +      // Execute the method.
  +      int statusCode = client.executeMethod(method);
  +
  +      if (statusCode != HttpStatus.SC_OK) {
  +        System.err.println("Method failed: " + method.getStatusLine());
  +        System.exit(-2);
  +      }
  +
  +      // Read the response body.
  +      byte[] responseBody = method.getResponseBody();
  +
  +      // Deal with the response.
  +      // Use caution: ensure correct character encoding and is not binary data
  +      System.out.println(new String(responseBody));
  +
  +    } catch (IOException e) {
  +      System.err.println("Failed to download file.");
  +      e.printStackTrace();
  +      System.exit(-1);
  +    } finally {
  +      // Release the connection.
  +      method.releaseConnection();
  +    }
  +  }
  +}]]></source>
       </section>
     </body>
   </document>
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to