From 763c0fdf7fffe102cf7b51bc18f3dd1272cfc1ff Mon Sep 17 00:00:00 2001 From: Rudy De Busscher Date: Sat, 27 Jun 2015 23:08:17 +0200 Subject: [PATCH] Closing InputStream when image from tempFile is send to browser. Fixes #6. --- .../jsf/primefaces/ImageResourceHandler.java | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/be/rubus/web/jsf/primefaces/ImageResourceHandler.java b/core/src/main/java/be/rubus/web/jsf/primefaces/ImageResourceHandler.java index dfc569d..b66d2bb 100644 --- a/core/src/main/java/be/rubus/web/jsf/primefaces/ImageResourceHandler.java +++ b/core/src/main/java/be/rubus/web/jsf/primefaces/ImageResourceHandler.java @@ -29,11 +29,15 @@ import java.io.InputStream; import java.net.URLEncoder; import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; /** */ public class ImageResourceHandler extends ResourceHandlerWrapper { + private static final Logger LOG = Logger.getLogger(ImageResourceHandler.class.getName()); + private ResourceHandler wrapped; public ImageResourceHandler(ResourceHandler original) { @@ -64,10 +68,14 @@ public void handleResourceRequest(FacesContext context) throws IOException { byte[] buffer = new byte[2048]; - int length; - InputStream inputStream = streamedContent.getStream(); - while ((length = (inputStream.read(buffer))) >= 0) { - externalContext.getResponseOutputStream().write(buffer, 0, length); + try { + int length; + InputStream inputStream = streamedContent.getStream(); + while ((length = (inputStream.read(buffer))) >= 0) { + externalContext.getResponseOutputStream().write(buffer, 0, length); + } + } finally { + closeStreamContent(streamedContent); } externalContext.responseFlushBuffer(); @@ -78,5 +86,16 @@ public void handleResourceRequest(FacesContext context) throws IOException { } } + + private void closeStreamContent(StreamedContent streamedContent) { + try { + if (streamedContent != null) { + streamedContent.getStream().close(); + } + } catch (Exception e) { + LOG.log(Level.SEVERE, "Unexpected error took while attempting to close the streamed content of temporary file associated to the advanced graphic image renderer", + e); + } + } }