Author: antoine
Date: Fri Dec  1 00:56:45 2006
New Revision: 481189

URL: http://svn.apache.org/viewvc?view=rev&rev=481189
Log:
HttpClient 3.0 support, Bugzilla 35213, contributed by Eric Van

Added:
    jakarta/slide/trunk/contributors.xml
Modified:
    jakarta/slide/trunk/WHATSNEW
    
jakarta/slide/trunk/webdavclient/clientlib/src/java/org/apache/webdav/lib/methods/HttpRequestBodyMethodBase.java

Modified: jakarta/slide/trunk/WHATSNEW
URL: 
http://svn.apache.org/viewvc/jakarta/slide/trunk/WHATSNEW?view=diff&rev=481189&r1=481188&r2=481189
==============================================================================
--- jakarta/slide/trunk/WHATSNEW (original)
+++ jakarta/slide/trunk/WHATSNEW Fri Dec  1 00:56:45 2006
@@ -15,5 +15,8 @@
 Other changes:
 --------------
 
+* Patch allowing Slide to work with httpclient version 3.0
+  Bugzilla 35213.
+
 
 

Added: jakarta/slide/trunk/contributors.xml
URL: 
http://svn.apache.org/viewvc/jakarta/slide/trunk/contributors.xml?view=auto&rev=481189
==============================================================================
--- jakarta/slide/trunk/contributors.xml (added)
+++ jakarta/slide/trunk/contributors.xml Fri Dec  1 00:56:45 2006
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE contributors
+[
+<!ELEMENT name (first?, middle?, last)>
+<!ELEMENT contributors (introduction, name+)>
+<!ELEMENT first (#PCDATA)>
+<!ELEMENT introduction (#PCDATA)>
+<!ELEMENT middle (#PCDATA)>
+<!ELEMENT last (#PCDATA)>
+]
+>
+
+<contributors>
+  <introduction>
+  These are some of the many people who have helped Slide become so successful.
+  </introduction>
+  <name>
+    <first>Eric</first>
+    <last>Van</last>
+  </name>
+</contributors>
+

Modified: 
jakarta/slide/trunk/webdavclient/clientlib/src/java/org/apache/webdav/lib/methods/HttpRequestBodyMethodBase.java
URL: 
http://svn.apache.org/viewvc/jakarta/slide/trunk/webdavclient/clientlib/src/java/org/apache/webdav/lib/methods/HttpRequestBodyMethodBase.java?view=diff&rev=481189&r1=481188&r2=481189
==============================================================================
--- 
jakarta/slide/trunk/webdavclient/clientlib/src/java/org/apache/webdav/lib/methods/HttpRequestBodyMethodBase.java
 (original)
+++ 
jakarta/slide/trunk/webdavclient/clientlib/src/java/org/apache/webdav/lib/methods/HttpRequestBodyMethodBase.java
 Fri Dec  1 00:56:45 2006
@@ -29,6 +29,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.lang.reflect.Method;
 import java.net.URL;
 import org.apache.commons.httpclient.ChunkedOutputStream;
 import org.apache.commons.httpclient.HttpConnection;
@@ -48,6 +49,8 @@
 public abstract class HttpRequestBodyMethodBase extends HttpMethodBase {
 
 
+    private static Method chunkedOutputStreamFinish;
+
     // ----------------------------------------------------------- Constructors
 
 
@@ -191,7 +194,7 @@
     protected boolean writeRequestBody(HttpState state, HttpConnection conn)
         throws IOException, HttpException {
         OutputStream out = conn.getRequestOutputStream();
-        if (isHttp11() && (null == getRequestHeader("Content-Length"))) {
+        if (isHttp11() && getRequestContentLength() == -1) {
             out = new ChunkedOutputStream(out);
         }
 
@@ -215,10 +218,41 @@
             }
             out.write(buffer, 0, nb);
         }
+
+        // httpclient 3.0 support
+        if(out instanceof ChunkedOutputStream){
+          try{
+            if(chunkedOutputStreamFinish == null){
+              chunkedOutputStreamFinish = out.getClass().getMethod("finish", 
null);
+            }
+            chunkedOutputStreamFinish.invoke(out, null);
+          }catch(NoSuchMethodException nsme){
+            // must be httpclient 2.0.x
+          }catch(Exception e){
+            throw new HttpException(e.getClass() + ": " + e.getMessage());
+          }
+        }
         out.flush();
         return true;
     }
 
+    /**
+     * In httpclient 3.0, setting Content-Length was moved to
+     * EntityEnclosingMethod class.
+     */
+    protected void addRequestHeaders(HttpState state, HttpConnection conn)
+    throws IOException, HttpException {
+        super.addRequestHeaders(state, conn);
+        if ((getRequestHeader("content-length") == null)
+            && (getRequestHeader("Transfer-Encoding") == null)) {
+            long len = getRequestContentLength();
+            if (len >= 0) {
+                addRequestHeader("Content-Length", String.valueOf(len));
+            } else if ((len == -1) && isHttp11()) {
+                addRequestHeader("Transfer-Encoding", "chunked");
+            }
+        }
+    }
     /**
      * Override the method of [EMAIL PROTECTED] HttpMethodBase}
      * to return the appropriate content length.



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

Reply via email to