Index: httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntry.java =================================================================== --- httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntry.java (revision 943759) +++ httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntry.java (revision ) @@ -26,6 +26,13 @@ */ package org.apache.http.impl.client.cache; +import org.apache.http.*; +import org.apache.http.annotation.Immutable; +import org.apache.http.entity.ByteArrayEntity; +import org.apache.http.impl.cookie.DateParseException; +import org.apache.http.impl.cookie.DateUtils; +import org.apache.http.message.BasicHeader; + import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; @@ -35,16 +42,6 @@ import java.util.HashSet; import java.util.Set; -import org.apache.http.Header; -import org.apache.http.HeaderElement; -import org.apache.http.HttpRequest; -import org.apache.http.HttpResponse; -import org.apache.http.ProtocolVersion; -import org.apache.http.annotation.Immutable; -import org.apache.http.impl.cookie.DateParseException; -import org.apache.http.impl.cookie.DateUtils; -import org.apache.http.message.BasicHeader; - /** * Structure used to store an {@link HttpResponse} in a cache * @@ -94,7 +91,7 @@ this.responseHeaders.setHeaders(responseHeaders); this.status = status; this.reason = reason; - this.body = responseBytes.clone(); + this.body = responseBytes; } /** @@ -107,7 +104,7 @@ toCopy.getResponseDate(), toCopy.getProtocolVersion(), toCopy.getAllHeaders(), - toCopy.getBody(), + toCopy.body, toCopy.getStatusCode(), toCopy.getReasonPhrase()); @@ -139,8 +136,8 @@ return this.responseDate; } - public byte[] getBody() { - return body.clone(); + public HttpEntity getBody() { + return new ByteArrayEntity(body); } public Header[] getAllHeaders() { Index: httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachedHttpResponseGenerator.java =================================================================== --- httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachedHttpResponseGenerator.java (revision 943759) +++ httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachedHttpResponseGenerator.java (revision ) @@ -31,7 +31,6 @@ import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.annotation.Immutable; -import org.apache.http.entity.ByteArrayEntity; import org.apache.http.message.BasicHeader; import org.apache.http.message.BasicHttpResponse; @@ -54,7 +53,7 @@ .getStatusCode(), entry.getReasonPhrase()); if (entry.getStatusCode() != HttpStatus.SC_NOT_MODIFIED) { - HttpEntity entity = new ByteArrayEntity(entry.getBody()); + HttpEntity entity = entry.getBody(); response.setEntity(entity); response.setHeaders(entry.getAllHeaders()); addMissingContentLengthHeader(response, entity); Index: httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntryUpdater.java =================================================================== --- httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntryUpdater.java (revision 943759) +++ httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntryUpdater.java (revision ) @@ -26,18 +26,16 @@ */ package org.apache.http.impl.client.cache; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.List; -import java.util.ListIterator; - import org.apache.http.Header; import org.apache.http.HttpResponse; import org.apache.http.annotation.Immutable; import org.apache.http.impl.cookie.DateParseException; import org.apache.http.impl.cookie.DateUtils; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.*; + /** * Update a {@link CacheEntry} with new or updated information based on the latest * 200 or 304 status responses from the Server. Use the {@link HttpResponse} to perform @@ -56,15 +54,21 @@ * @param responseDate When the response was gotten * @param response The HttpResponse from the backend server call * @return CacheEntry an updated version of the cache entry + * @throws java.io.IOException if something bad happens while trying to read the body from the original entry */ - public CacheEntry updateCacheEntry(CacheEntry entry, Date requestDate, Date responseDate, HttpResponse response) { + public CacheEntry updateCacheEntry(CacheEntry entry, Date requestDate, Date responseDate, HttpResponse response) throws IOException { Header[] mergedHeaders = mergeHeaders(entry, response); + byte[] body; + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + + entry.getBody().writeTo(stream); + CacheEntry updated = new CacheEntry(requestDate, responseDate, entry.getProtocolVersion(), mergedHeaders, - entry.getBody(), + stream.toByteArray(), entry.getStatusCode(), entry.getReasonPhrase());