[ 
https://issues.apache.org/jira/browse/FOP-3083?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17569878#comment-17569878
 ] 

Simon Steiner commented on FOP-3083:
------------------------------------

for linux to test:
{code:java}
    @Test
    public void x() throws Exception {
        try {
            FopFactoryBuilder fopFactoryBuilder = new FopFactoryBuilder(new 
File(".").toURI());
            fopFactoryBuilder.setStrictFOValidation(true);
            fopFactoryBuilder.setStrictUserConfigValidation(true);
            FopFactory fopFactory = fopFactoryBuilder.build();
            try (ByteArrayOutputStream stream = new ByteArrayOutputStream()) {
                Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, stream);
                TransformerFactory transformerFactory = 
TransformerFactory.newInstance();
                Transformer transformer = transformerFactory.newTransformer();
                Source src = new StreamSource(new File("test.fo"));
                Result res = new SAXResult(fop.getDefaultHandler());
                transformer.transform(src, res);
            }
        }
        finally {
            Assert.assertTrue(isFileClosed(new File("example.jpg")));
        }
    }

    private boolean isFileClosed(File file) throws Exception {
        Process plsof = new ProcessBuilder(new String[]{"lsof", "|", "grep", 
file.getAbsolutePath()}).start();
        BufferedReader reader = new BufferedReader(new 
InputStreamReader(plsof.getInputStream()));
        String line;
        while((line=reader.readLine())!=null) {
            if(line.contains(file.getAbsolutePath())) {
                reader.close();
                plsof.destroy();
                return false;
            }
        }
        reader.close();
        plsof.destroy();
        return true;
    }
{code}


> Referenced JPG image is not closed when TransformerException is thrown by 
> transform()
> -------------------------------------------------------------------------------------
>
>                 Key: FOP-3083
>                 URL: https://issues.apache.org/jira/browse/FOP-3083
>             Project: FOP
>          Issue Type: Bug
>          Components: renderer/pdf
>    Affects Versions: 2.7
>         Environment: jdk-17.0.3.7-hotspot (Microsoft)
>            Reporter: Paul Sharp
>            Priority: Major
>         Attachments: Code snippet.txt, example.jpg, xsl-fo.xml
>
>
> We are trying to implement a workflow where the FO file and the images 
> referenced within, are stored in a temporary directory which we can clear 
> down once complete.
> When we disable strict FO validation, the approach works fine.
> However, when strict FO validation is enabled, a TransformerException is 
> thrown (as expected for a poor FO). But it appears to keep the image file 
> open until the JVM is shut down.
> I have checked through previous Jira entries and tried many other suggestions 
> (clearing the image cache etc.) but we cannot seem to get the file closed.
> The attached example code snippet illustrates the behaviour. We would expect 
> the example.jpg file to be deleted after processing.
> I hope I've provided enough here. Let me know if more detail is required.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to