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)
                {

Reply via email to