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); + } + } }