Updated Branches: refs/heads/master b719561b4 -> cfd70cc0f
WICKET-4718 ResourceStreamResource#getResourceStream() is called multiple times Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/cfd70cc0 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/cfd70cc0 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/cfd70cc0 Branch: refs/heads/master Commit: cfd70cc0f5507f7beb2d6ef5726509c8bfe16c7f Parents: b719561 Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Mon Aug 20 18:13:41 2012 +0300 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Mon Aug 20 18:13:41 2012 +0300 ---------------------------------------------------------------------- .../request/resource/ResourceStreamResource.java | 23 +++++++++----- 1 files changed, 15 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/cfd70cc0/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceStreamResource.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceStreamResource.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceStreamResource.java index 134f69d..7e79b23 100644 --- a/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceStreamResource.java +++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceStreamResource.java @@ -49,6 +49,11 @@ public class ResourceStreamResource extends AbstractResource private Duration cacheDuration; + /** + * The stream that is returned by #getResourceStream() and is cached only for the request lifecycle. + * This way it is possible to create a new instance of IResourceStream for each request and close it at the end. + */ + private transient IResourceStream requestScopedStream = null; /** * Constructor. @@ -129,9 +134,11 @@ public class ResourceStreamResource extends AbstractResource private IResourceStream internalGetResourceStream() { - final IResourceStream resourceStream = getResourceStream(); - Checks.notNull(resourceStream, "%s#getResourceStream() should not return null!", ResourceStreamResource.class.getName()); - return resourceStream; + if (requestScopedStream == null) { + requestScopedStream = getResourceStream(); + Checks.notNull(requestScopedStream, "%s#getResourceStream() should not return null!", getClass().getName()); + } + return requestScopedStream; } @Override @@ -163,7 +170,7 @@ public class ResourceStreamResource extends AbstractResource catch (ResourceStreamNotFoundException e) { data.setError(HttpServletResponse.SC_NOT_FOUND); - close(); + close(resourceStream); } } @@ -191,7 +198,7 @@ public class ResourceStreamResource extends AbstractResource public void writeData(Attributes attributes) throws IOException { ((IResourceStreamWriter)resourceStream).write(attributes.getResponse().getOutputStream()); - close(); + close(resourceStream); } }); } @@ -209,7 +216,7 @@ public class ResourceStreamResource extends AbstractResource } finally { - close(); + close(resourceStream); } } }); @@ -219,11 +226,11 @@ public class ResourceStreamResource extends AbstractResource return data; } - private void close() + private void close(IResourceStream stream) { try { - internalGetResourceStream().close(); + stream.close(); } catch (IOException e) {
