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