You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by jo...@apache.org on 2012/06/07 21:43:23 UTC

svn commit: r1347764 - in /httpcomponents/httpclient/trunk/httpclient-cache/src: main/java/org/apache/http/client/cache/ main/java/org/apache/http/impl/client/cache/ test/java/org/apache/http/client/cache/ test/java/org/apache/http/impl/client/cache/

Author: jonm
Date: Thu Jun  7 19:43:22 2012
New Revision: 1347764

URL: http://svn.apache.org/viewvc?rev=1347764&view=rev
Log:
HTTPCLIENT-1202: Allow for caching responses without bodies.

Modified:
    httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/client/cache/HttpCacheEntry.java
    httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntity.java
    httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/client/cache/TestHttpCacheEntry.java
    httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/DummyHttpClient.java
    httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachingHttpClient.java

Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/client/cache/HttpCacheEntry.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/client/cache/HttpCacheEntry.java?rev=1347764&r1=1347763&r2=1347764&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/client/cache/HttpCacheEntry.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/client/cache/HttpCacheEntry.java Thu Jun  7 19:43:22 2012
@@ -97,9 +97,6 @@ public class HttpCacheEntry implements S
         if (responseHeaders == null) {
             throw new IllegalArgumentException("Response headers may not be null");
         }
-        if (resource == null) {
-            throw new IllegalArgumentException("Resource may not be null");
-        }
         this.requestDate = requestDate;
         this.responseDate = responseDate;
         this.statusLine = statusLine;

Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntity.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntity.java?rev=1347764&r1=1347763&r2=1347764&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntity.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntity.java Thu Jun  7 19:43:22 2012
@@ -35,6 +35,7 @@ import org.apache.http.Header;
 import org.apache.http.HttpEntity;
 import org.apache.http.annotation.Immutable;
 import org.apache.http.client.cache.HttpCacheEntry;
+import org.apache.http.client.cache.Resource;
 import org.apache.http.protocol.HTTP;
 
 @Immutable
@@ -66,7 +67,8 @@ class CacheEntity implements HttpEntity,
     }
 
     public long getContentLength() {
-        return this.cacheEntry.getResource().length();
+        Resource resource = this.cacheEntry.getResource();
+		return (resource != null) ? resource.length() : 0L;
     }
 
     public InputStream getContent() throws IOException {

Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/client/cache/TestHttpCacheEntry.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/client/cache/TestHttpCacheEntry.java?rev=1347764&r1=1347763&r2=1347764&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/client/cache/TestHttpCacheEntry.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/client/cache/TestHttpCacheEntry.java Thu Jun  7 19:43:22 2012
@@ -178,16 +178,6 @@ public class TestHttpCacheEntry {
     }
 
     @Test
-    public void mustProvideResource() {
-        try {
-            new HttpCacheEntry(new Date(), new Date(), statusLine,
-                    new Header[]{}, null);
-            fail("Should have thrown exception");
-        } catch (IllegalArgumentException expected) {
-        }
-    }
-
-    @Test
     public void canRetrieveOriginalStatusLine() {
         entry = new HttpCacheEntry(new Date(), new Date(), statusLine,
                 new Header[]{}, mockResource);

Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/DummyHttpClient.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/DummyHttpClient.java?rev=1347764&r1=1347763&r2=1347764&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/DummyHttpClient.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/DummyHttpClient.java Thu Jun  7 19:43:22 2012
@@ -50,6 +50,7 @@ public class DummyHttpClient implements 
     private ClientConnectionManager connManager = new SingleClientConnManager();
     private HttpRequest request;
     private HttpResponse response = new BasicHttpResponse(new ProtocolVersion("HTTP",1,1), HttpStatus.SC_OK, "OK");
+    private int executions = 0;
     
     public void setParams(HttpParams params) {
         this.params = params;
@@ -78,24 +79,28 @@ public class DummyHttpClient implements 
     public HttpResponse execute(HttpUriRequest request) throws IOException,
             ClientProtocolException {
         this.request = request;
+        executions++;
         return response;
     }
 
     public HttpResponse execute(HttpUriRequest request, HttpContext context)
             throws IOException, ClientProtocolException {
         this.request = request;
+        executions++;
         return response;
     }
 
     public HttpResponse execute(HttpHost target, HttpRequest request)
             throws IOException, ClientProtocolException {
         this.request = request;
+        executions++;
         return response;
     }
 
     public HttpResponse execute(HttpHost target, HttpRequest request,
             HttpContext context) throws IOException, ClientProtocolException {
         this.request = request;
+        executions++;
         return response;
     }
 
@@ -103,6 +108,7 @@ public class DummyHttpClient implements 
             ResponseHandler<? extends T> responseHandler) throws IOException,
             ClientProtocolException {
         this.request = request;
+        executions++;
         return responseHandler.handleResponse(response);
     }
 
@@ -110,6 +116,7 @@ public class DummyHttpClient implements 
             ResponseHandler<? extends T> responseHandler, HttpContext context)
             throws IOException, ClientProtocolException {
         this.request = request;
+        executions++;
         return responseHandler.handleResponse(response);
     }
 
@@ -117,6 +124,7 @@ public class DummyHttpClient implements 
             ResponseHandler<? extends T> responseHandler) throws IOException,
             ClientProtocolException {
         this.request = request;
+        executions++;
         return responseHandler.handleResponse(response);
     }
 
@@ -124,7 +132,11 @@ public class DummyHttpClient implements 
             ResponseHandler<? extends T> responseHandler, HttpContext context)
             throws IOException, ClientProtocolException {
         this.request = request;
+        executions++;
         return responseHandler.handleResponse(response);
     }
 
+    public int getExecutions() {
+    	return executions;
+    }
 }

Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachingHttpClient.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachingHttpClient.java?rev=1347764&r1=1347763&r2=1347764&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachingHttpClient.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachingHttpClient.java Thu Jun  7 19:43:22 2012
@@ -2003,6 +2003,19 @@ public class TestCachingHttpClient {
 		assertAllContextVariablesAreEqualTo(ctx, value);
 	}
 	
+	@Test
+	public void testCanCacheAResponseWithoutABody() throws Exception {
+		HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_NO_CONTENT, "No Content");
+		response.setHeader("Date", DateUtils.formatDate(new Date()));
+		response.setHeader("Cache-Control","max-age=300");
+		DummyHttpClient backend = new DummyHttpClient();
+		backend.setResponse(response);
+		impl = new CachingHttpClient(backend);
+		impl.execute(host, request);
+		impl.execute(host, request);
+		assertEquals(1, backend.getExecutions());
+	}
+	
     private void getCacheEntryReturns(HttpCacheEntry result) throws IOException {
         expect(mockCache.getCacheEntry(host, request)).andReturn(result);
     }