svn commit: r1784729 - in /xmlgraphics/fop-pdf-images/trunk: src/java/org/apache/fop/render/pdf/pdfbox/ test/java/org/apache/fop/render/pdf/

[email protected]
Newsgroups gmane.text.xml.fop.cvs
Message-ID <[email protected]>
Author: ssteiner
Date: Tue Feb 28 11:53:25 2017
New Revision: 1784729

URL: http://svn.apache.org/viewvc?rev=1784729&view=rev
Log:
FOP-2693: PDF plugin document cache may return closed document

Modified:
    xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/ImagePDF.java
    xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxImageHandler.java
    xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PreloaderPDF.java
    xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PreloaderPDFTestCase.java

Modified: xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/ImagePDF.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/ImagePDF.java?rev=1784729&r1=1784728&r2=1784729&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/ImagePDF.java (original)
+++ xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/ImagePDF.java Tue Feb 28 11:53:25 2017
@@ -66,18 +66,15 @@ public class ImagePDF extends AbstractIm
 
     /** {@inheritDoc} */
     public boolean isCacheable() {
-        return true;
+        return false;
     }
 
-    /** {@inheritDoc} */
-    @Override
-    protected void finalize() throws Throwable {
+    public void close() {
         try {
-            this.pddoc.close();
-        } catch (IOException ioe) {
-            //ignore
+            pddoc.close();
+        } catch (IOException e) {
+            throw new RuntimeException(e);
         }
-        super.finalize();
     }
 
 }

Modified: xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxImageHandler.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxImageHandler.java?rev=1784729&r1=1784728&r2=1784729&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxImageHandler.java (original)
+++ xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxImageHandler.java Tue Feb 28 11:53:25 2017
@@ -79,6 +79,7 @@ public class PDFBoxImageHandler extends
                 pageAdjust.translate(x * (1 / pageAdjust.getScaleX()), -y * (1 / -pageAdjust.getScaleY()));
             }
             generator.placeImage(pageAdjust, stream);
+            pdfImage.close();
         } catch (Throwable t) {
             throw new RuntimeException(
                     "Error on PDF page: " + pdfImage.getInfo().getOriginalURI() + " " + t.getMessage(), t);

Modified: xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PreloaderPDF.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PreloaderPDF.java?rev=1784729&r1=1784728&r2=1784729&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PreloaderPDF.java (original)
+++ xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PreloaderPDF.java Tue Feb 28 11:53:25 2017
@@ -23,10 +23,6 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.net.URI;
 import java.net.URISyntaxException;
-import java.util.Collections;
-import java.util.Locale;
-import java.util.Map;
-import java.util.WeakHashMap;
 
 import javax.imageio.stream.ImageInputStream;
 import javax.xml.transform.Source;
@@ -54,15 +50,6 @@ public class PreloaderPDF extends Abstra
     /** PDF header text */
     private static final String PDF_HEADER = "%PDF-";
 
-    /** static PDDocument cache for faster multi-page processing */
-    private static final Cache.Type CACHE_TYPE = Cache.Type.valueOf(
-            System.getProperty("fop.pdfbox.preloader-cache", Cache.Type.WEAK.name()).toUpperCase(Locale.ENGLISH));
-
-    private static Map<Object, Cache<URI, PDDocument>> documentCacheMap
-            = Collections.synchronizedMap(new WeakHashMap<Object, Cache<URI, PDDocument>>());
-    //the cache here can cause problems because PDDocument that have been closed might still
-    //be accessed. Example: java.io.IOException: The handle is invalid
-
     /** {@inheritDoc} */
     public ImageInfo preloadImage(String uri, Source src, ImageContext context)
                 throws IOException, ImageException {
@@ -162,7 +149,7 @@ public class PreloaderPDF extends Abstra
     private PDDocument getDocument(Object context, URI uri, Source src)
             throws IOException {
         try {
-            return getDocumentCache(context).getValue(uri, createDocumentMaker(src, uri));
+            return createDocumentMaker(src, uri).make();
         } catch (IOException ioe) {
             throw ioe;
         } catch (Exception e) {
@@ -171,16 +158,6 @@ public class PreloaderPDF extends Abstra
         }
     }
 
-    private Cache<URI, PDDocument> getDocumentCache(Object context) {
-        Cache<URI, PDDocument> documentCache = documentCacheMap.get(context);
-
-        if (documentCache == null) {
-            documentCache = Cache.createCache(CACHE_TYPE);
-            documentCacheMap.put(context, documentCache);
-        }
-        return documentCache;
-    }
-
     private ValueMaker<PDDocument> createDocumentMaker(final Source src, final URI docURI) {
         return new DocumentMaker(src, docURI);
     }

Modified: xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PreloaderPDFTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PreloaderPDFTestCase.java?rev=1784729&r1=1784728&r2=1784729&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PreloaderPDFTestCase.java (original)
+++ xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PreloaderPDFTestCase.java Tue Feb 28 11:53:25 2017
@@ -29,12 +29,15 @@ import javax.imageio.stream.MemoryCacheI
 
 import org.junit.Test;
 
+import org.apache.pdfbox.pdmodel.PDDocument;
+
 import org.apache.xmlgraphics.image.loader.ImageException;
 import org.apache.xmlgraphics.image.loader.ImageInfo;
 import org.apache.xmlgraphics.image.loader.ImageSource;
 import org.apache.xmlgraphics.image.loader.impl.DefaultImageContext;
 import org.apache.xmlgraphics.image.loader.impl.ImageRendered;
 
+import org.apache.fop.render.pdf.pdfbox.ImagePDF;
 import org.apache.fop.render.pdf.pdfbox.PreloaderImageRawData;
 import org.apache.fop.render.pdf.pdfbox.PreloaderPDF;
 
@@ -63,4 +66,21 @@ public class PreloaderPDFTestCase {
         ImageInfo imageInfo = new PreloaderPDF().preloadImage("", imageSource, new DefaultImageContext());
         Assert.assertEquals(imageInfo.getMimeType(), "application/pdf");
     }
+
+    @Test
+    public void testPreloaderPDFCache() throws IOException, ImageException {
+        DefaultImageContext context = new DefaultImageContext();
+        readPDF(context);
+        readPDF(context);
+    }
+
+    private void readPDF(DefaultImageContext context) throws IOException, ImageException {
+        ImageSource imageSource = new ImageSource(
+                ImageIO.createImageInputStream(new File(PDFBoxAdapterTestCase.ROTATE)), "", true);
+        ImageInfo imageInfo = new PreloaderPDF().preloadImage("", imageSource, context);
+        ImagePDF img = (ImagePDF) imageInfo.getOriginalImage();
+        PDDocument doc = img.getPDDocument();
+        doc.save(new ByteArrayOutputStream());
+        img.close();
+    }
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.