You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "Oleg Kalnichevski (Commented) (JIRA)" <ji...@apache.org> on 2012/02/02 12:17:53 UTC

[jira] [Commented] (HTTPCLIENT-1147) When HttpClient-Cache cannot open cache file, should act like miss

    [ https://issues.apache.org/jira/browse/HTTPCLIENT-1147?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13198695#comment-13198695 ] 

Oleg Kalnichevski commented on HTTPCLIENT-1147:
-----------------------------------------------

I did a lousy job reviewing the patch. I missed the fact that the patch broke API compatibility by adding an additional method to the Resource interface. 

I backed out those changes as they seem to have no impact on the resolution of the original issue. The test case testing the fix still pass for me even without API breaking changes.

Oleg
                
> When HttpClient-Cache cannot open cache file, should act like miss
> ------------------------------------------------------------------
>
>                 Key: HTTPCLIENT-1147
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1147
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: Cache
>    Affects Versions: 4.2 Alpha1
>            Reporter: Craig
>             Fix For: 4.1.3, 4.2 Beta1
>
>         Attachments: issue_1147.patch
>
>
> Set up HttpClient-Cache like this:
> final String cacheDir = "cachedir";
> HttpClient cachingHttpClient;
> final CacheConfig cacheConfig = new CacheConfig();
> cacheConfig.setSharedCache(false);
> cacheConfig.setMaxObjectSizeBytes(262144); //256kb
> if(! new File(cacheDir, "httpclient-cache").exists()){
> 	if(!new File(cacheDir, "httpclient-cache").mkdir()){
> 		throw new RuntimeException("failed to create httpclient cache directory: " + new File(cacheDir, "httpclient-cache").getAbsolutePath());
> 	}
> }
> final ResourceFactory resourceFactory = new FileResourceFactory(new File(cacheDir, "httpclient-cache"));
> final HttpCacheStorage httpCacheStorage = new ManagedHttpCacheStorage(cacheConfig);
> cachingHttpClient = new CachingHttpClient(client, resourceFactory, httpCacheStorage, cacheConfig);
> Then make a request:
> final HttpGet get = new HttpGet(url);
> final HttpResponse response = cachingHttpClient.execute(get);
> final StatusLine statusLine = response.getStatusLine();
> if (statusLine.getStatusCode() >= 300) {
> 	if(statusLine.getStatusCode() == 404)
> 		throw new NoResultException();
>     throw new HttpResponseException(statusLine.getStatusCode(),
>             statusLine.getReasonPhrase());
> }
> response.getEntity().getContent();
> Everything worked as expected.
> Now delete the cache directory ("cachedir/httpclient-cache" in this example).
> And make the same request again.
> Actual:
>  Caused by: java.lang.IllegalStateException: Content has been consumed
> 	at org.apache.http.entity.BasicHttpEntity.getContent(BasicHttpEntity.java:84)
> 	at org.apache.http.conn.BasicManagedEntity.getContent(BasicManagedEntity.java:100)
> Expected:
> HttpClient shouldn't throw an exception - it should just perform the request again acting like a cache miss.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

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