hc-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Oleg Kalnichevski <ol...@apache.org>
Subject Re: A Retry on a PutMethod
Date Tue, 23 Sep 2003 19:38:20 GMT
Hi Matt,
The problem is that a stream can only be read from once, hence,
unbuffered POST & POST content cannot be repeated. 

There's a another (probably better) solution to this problem. All you
have to do is to activate 'expect: 100-continue' handshake. Refer to the
javadoc below for details

http://jakarta.apache.org/commons/httpclient/apidocs/org/apache/commons/httpclient/methods/ExpectContinueMethod.html#setUseExpectHeader(boolean)

Hope this helps

Oleg


On Tue, 2003-09-23 at 19:15, Rezvani, Matt wrote:
> When setting the request content length of an enclosed entity to be stored
> on the WebDAV server using the PutMethod, the HttpClient returns an
> "Unbuffered entity enclosing request can not be repeated" HttpException. I
> am aware that if the request is not buffered, then the PutMethod (or
> PostMethod) cannot retry the request in case of an authentication challenge
> or an I/O error. An alternate solution would be to let the PutMethod buffer
> the entire file by setting the request content length to
> EntityEnclosingMethod.CONTENT_LENGTH_AUTO. This is OK for small files;
> however for enormous size files it causes an out-of-memory error. My
> question is how do I send a retry request after an authentication challenge
> has been sent back by the server, and why can't the
> EntityEnclosingMethod.writeRequestBody() send the request again from it's
> requestStream.
> 
> Here is a sample code.
> 
> //--------------------------
> import org.apache.commons.httpclient.HttpClient;
> import org.apache.commons.httpclient.UsernamePasswordCredentials;
> import org.apache.commons.httpclient.methods.PutMethod;
> import java.io.*;
> 
> public class PutMethodExample
> {
> 		public static void main(String args[]) throws Exception
> 	{
> 		HttpClient client = new HttpClient();
> 		// Assuming that the credentials are passed to the
> HttpClient using
> 		// the HttpState.setCredentials
> 
> 		PutMethod put = new
> 	
> PutMethod("http://myServer:/webdav/example.txt");
> 		File bigFile = new File("c:\\j2sdk-1_4_2-windows-i586.exe");
> 		long fileLength = bigFile.length();
> 		put.setRequestContentLength((int)fileLength);
> 		put.setRequestBody(new FileInputStream(bigFile));
> 
> 		int status = client.executeMethod(put);
> 		put.releaseConnection();
> 	}
> }
> 
> Thanks,
> Matt
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: commons-httpclient-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-httpclient-dev-help@jakarta.apache.org


Mime
View raw message