You are viewing a plain text version of this content. The canonical link for it is here.
Posted to httpclient-users@hc.apache.org by Francesco Lazzarino <fl...@ufl.edu> on 2008/04/29 22:22:30 UTC

handle response when connection is closed.

# scenario:
PUTting a large file to a URL.
server reads Content-Length header and determines the file is to large.
server sends a 413 response.
server closes connection.

# my problem:
Since it is a large file the entity is not completely buffered, the  
server closes the connection before HttpClient completes the request  
transmission. I implemented a HttpMethodRetryHandler to handle this  
but method.getStatusCode() throws a NullPointerException. I want to be  
able to read the response in order to determine what happened. Any  
ideas?

# log output of a 500MB PUT (no response seems to be given)
2008/04/29 16:00:38:910 EDT [DEBUG] HttpConnection - Open connection  
to localhost:9009
2008/04/29 16:00:38:924 EDT [DEBUG] header - >> "PUT /foo HTTP/1.1[\r] 
[\n]"
2008/04/29 16:00:38:925 EDT [DEBUG] HttpMethodBase - Adding Host  
request header
2008/04/29 16:00:42:894 EDT [DEBUG] header - >> "User-Agent: Jakarta  
Commons-HttpClient/3.1[\r][\n]"
2008/04/29 16:00:42:894 EDT [DEBUG] header - >> "Host: localhost: 
9009[\r][\n]"
2008/04/29 16:00:42:894 EDT [DEBUG] header - >> "Content-Length:  
472870912[\r][\n]"
2008/04/29 16:00:42:894 EDT [DEBUG] header - >> "[\r][\n]"
2008/04/29 16:00:42:895 EDT [DEBUG] HttpMethodDirector - Closing the  
connection.
2008/04/29 16:00:42:896 EDT [DEBUG] HttpConnection - Releasing  
connection back to connection manager.

# log output of a 1k PUT (the response is read)
2008/04/29 16:20:58:945 EDT [DEBUG] HttpConnection - Open connection  
to localhost:9009
2008/04/29 16:20:58:959 EDT [DEBUG] header - >> "PUT /foo HTTP/1.1[\r] 
[\n]"
2008/04/29 16:20:58:960 EDT [DEBUG] HttpMethodBase - Adding Host  
request header
2008/04/29 16:20:58:973 EDT [DEBUG] header - >> "User-Agent: Jakarta  
Commons-HttpClient/3.1[\r][\n]"
2008/04/29 16:20:58:973 EDT [DEBUG] header - >> "Host: localhost: 
9009[\r][\n]"
2008/04/29 16:20:58:974 EDT [DEBUG] header - >> "Content-Length:  
1024[\r][\n]"
2008/04/29 16:20:58:974 EDT [DEBUG] header - >> "[\r][\n]"
2008/04/29 16:20:58:974 EDT [DEBUG] EntityEnclosingMethod - Request  
body sent
2008/04/29 16:20:58:975 EDT [DEBUG] header - << "  HTTP/1.1 413 Too  
Big[\n]"
2008/04/29 16:20:58:975 EDT [DEBUG] header - << "  HTTP/1.1 413 Too  
Big[\r][\n]"
2008/04/29 16:20:58:976 EDT [DEBUG] header - << "  Content-Type:  
none[\n]"
2008/04/29 16:20:58:976 EDT [INFO] HttpMethodBase - Response content  
length is not known
2008/04/29 16:20:58:976 EDT [DEBUG] HttpMethodBase - Force-close  
connection: true

thanks in advance,
-franco

Francesco Lazzarino
Florida Digital Archive Programmer
flaz@ufl.edu




---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org


Re: handle response when connection is closed.

Posted by Francesco Lazzarino <fl...@ufl.edu>.
On Apr 30, 2008, at 4:50 AM, Oleg Kalnichevski wrote:

> On Tue, 2008-04-29 at 16:22 -0400, Francesco Lazzarino wrote:
>> # scenario:
>> PUTting a large file to a URL.
>> server reads Content-Length header and determines the file is to  
>> large.
>> server sends a 413 response.
>> server closes connection.
>>
>> # my problem:
>> Since it is a large file the entity is not completely buffered, the
>> server closes the connection before HttpClient completes the request
>> transmission. I implemented a HttpMethodRetryHandler to handle this
>> but method.getStatusCode() throws a NullPointerException. I want to  
>> be
>> able to read the response in order to determine what happened. Any
>> ideas?
>>
>
> Francesco,
>
> This is a generic problem with classic (blocking) I/O in Java. There  
> is
> simply no easy way of testing for pending input data while streaming
> data out using blocking I/O. The only feasible solution to this  
> issue is
> the use of non-blocking I/O, which has issues of its own.

Thanks this clears things up. I think i'll do some pattern matching on  
the exception, document it and hope for the best.

Thanks,

Franco
>
>
> Oleg
>
>
>> # log output of a 500MB PUT (no response seems to be given)
>> 2008/04/29 16:00:38:910 EDT [DEBUG] HttpConnection - Open connection
>> to localhost:9009
>> 2008/04/29 16:00:38:924 EDT [DEBUG] header - >> "PUT /foo HTTP/ 
>> 1.1[\r]
>> [\n]"
>> 2008/04/29 16:00:38:925 EDT [DEBUG] HttpMethodBase - Adding Host
>> request header
>> 2008/04/29 16:00:42:894 EDT [DEBUG] header - >> "User-Agent: Jakarta
>> Commons-HttpClient/3.1[\r][\n]"
>> 2008/04/29 16:00:42:894 EDT [DEBUG] header - >> "Host: localhost:
>> 9009[\r][\n]"
>> 2008/04/29 16:00:42:894 EDT [DEBUG] header - >> "Content-Length:
>> 472870912[\r][\n]"
>> 2008/04/29 16:00:42:894 EDT [DEBUG] header - >> "[\r][\n]"
>> 2008/04/29 16:00:42:895 EDT [DEBUG] HttpMethodDirector - Closing the
>> connection.
>> 2008/04/29 16:00:42:896 EDT [DEBUG] HttpConnection - Releasing
>> connection back to connection manager.
>>
>> # log output of a 1k PUT (the response is read)
>> 2008/04/29 16:20:58:945 EDT [DEBUG] HttpConnection - Open connection
>> to localhost:9009
>> 2008/04/29 16:20:58:959 EDT [DEBUG] header - >> "PUT /foo HTTP/ 
>> 1.1[\r]
>> [\n]"
>> 2008/04/29 16:20:58:960 EDT [DEBUG] HttpMethodBase - Adding Host
>> request header
>> 2008/04/29 16:20:58:973 EDT [DEBUG] header - >> "User-Agent: Jakarta
>> Commons-HttpClient/3.1[\r][\n]"
>> 2008/04/29 16:20:58:973 EDT [DEBUG] header - >> "Host: localhost:
>> 9009[\r][\n]"
>> 2008/04/29 16:20:58:974 EDT [DEBUG] header - >> "Content-Length:
>> 1024[\r][\n]"
>> 2008/04/29 16:20:58:974 EDT [DEBUG] header - >> "[\r][\n]"
>> 2008/04/29 16:20:58:974 EDT [DEBUG] EntityEnclosingMethod - Request
>> body sent
>> 2008/04/29 16:20:58:975 EDT [DEBUG] header - << "  HTTP/1.1 413 Too
>> Big[\n]"
>> 2008/04/29 16:20:58:975 EDT [DEBUG] header - << "  HTTP/1.1 413 Too
>> Big[\r][\n]"
>> 2008/04/29 16:20:58:976 EDT [DEBUG] header - << "  Content-Type:
>> none[\n]"
>> 2008/04/29 16:20:58:976 EDT [INFO] HttpMethodBase - Response content
>> length is not known
>> 2008/04/29 16:20:58:976 EDT [DEBUG] HttpMethodBase - Force-close
>> connection: true
>>
>> thanks in advance,
>> -franco
>>
>> Francesco Lazzarino
>> Florida Digital Archive Programmer
>> flaz@ufl.edu
>>
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
>> For additional commands, e-mail: httpclient-users-help@hc.apache.org
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> For additional commands, e-mail: httpclient-users-help@hc.apache.org
>
>

Francesco Lazzarino
Florida Digital Archive Programmer
flaz@ufl.edu




---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org


Re: handle response when connection is closed.

Posted by Oleg Kalnichevski <ol...@apache.org>.
On Tue, 2008-04-29 at 16:22 -0400, Francesco Lazzarino wrote:
> # scenario:
> PUTting a large file to a URL.
> server reads Content-Length header and determines the file is to large.
> server sends a 413 response.
> server closes connection.
> 
> # my problem:
> Since it is a large file the entity is not completely buffered, the  
> server closes the connection before HttpClient completes the request  
> transmission. I implemented a HttpMethodRetryHandler to handle this  
> but method.getStatusCode() throws a NullPointerException. I want to be  
> able to read the response in order to determine what happened. Any  
> ideas?
> 

Francesco,

This is a generic problem with classic (blocking) I/O in Java. There is
simply no easy way of testing for pending input data while streaming
data out using blocking I/O. The only feasible solution to this issue is
the use of non-blocking I/O, which has issues of its own.

Oleg


> # log output of a 500MB PUT (no response seems to be given)
> 2008/04/29 16:00:38:910 EDT [DEBUG] HttpConnection - Open connection  
> to localhost:9009
> 2008/04/29 16:00:38:924 EDT [DEBUG] header - >> "PUT /foo HTTP/1.1[\r] 
> [\n]"
> 2008/04/29 16:00:38:925 EDT [DEBUG] HttpMethodBase - Adding Host  
> request header
> 2008/04/29 16:00:42:894 EDT [DEBUG] header - >> "User-Agent: Jakarta  
> Commons-HttpClient/3.1[\r][\n]"
> 2008/04/29 16:00:42:894 EDT [DEBUG] header - >> "Host: localhost: 
> 9009[\r][\n]"
> 2008/04/29 16:00:42:894 EDT [DEBUG] header - >> "Content-Length:  
> 472870912[\r][\n]"
> 2008/04/29 16:00:42:894 EDT [DEBUG] header - >> "[\r][\n]"
> 2008/04/29 16:00:42:895 EDT [DEBUG] HttpMethodDirector - Closing the  
> connection.
> 2008/04/29 16:00:42:896 EDT [DEBUG] HttpConnection - Releasing  
> connection back to connection manager.
> 
> # log output of a 1k PUT (the response is read)
> 2008/04/29 16:20:58:945 EDT [DEBUG] HttpConnection - Open connection  
> to localhost:9009
> 2008/04/29 16:20:58:959 EDT [DEBUG] header - >> "PUT /foo HTTP/1.1[\r] 
> [\n]"
> 2008/04/29 16:20:58:960 EDT [DEBUG] HttpMethodBase - Adding Host  
> request header
> 2008/04/29 16:20:58:973 EDT [DEBUG] header - >> "User-Agent: Jakarta  
> Commons-HttpClient/3.1[\r][\n]"
> 2008/04/29 16:20:58:973 EDT [DEBUG] header - >> "Host: localhost: 
> 9009[\r][\n]"
> 2008/04/29 16:20:58:974 EDT [DEBUG] header - >> "Content-Length:  
> 1024[\r][\n]"
> 2008/04/29 16:20:58:974 EDT [DEBUG] header - >> "[\r][\n]"
> 2008/04/29 16:20:58:974 EDT [DEBUG] EntityEnclosingMethod - Request  
> body sent
> 2008/04/29 16:20:58:975 EDT [DEBUG] header - << "  HTTP/1.1 413 Too  
> Big[\n]"
> 2008/04/29 16:20:58:975 EDT [DEBUG] header - << "  HTTP/1.1 413 Too  
> Big[\r][\n]"
> 2008/04/29 16:20:58:976 EDT [DEBUG] header - << "  Content-Type:  
> none[\n]"
> 2008/04/29 16:20:58:976 EDT [INFO] HttpMethodBase - Response content  
> length is not known
> 2008/04/29 16:20:58:976 EDT [DEBUG] HttpMethodBase - Force-close  
> connection: true
> 
> thanks in advance,
> -franco
> 
> Francesco Lazzarino
> Florida Digital Archive Programmer
> flaz@ufl.edu
> 
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> For additional commands, e-mail: httpclient-users-help@hc.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org