複数の出力ファイルで XSLT 変換を実行したいと考えています。そこで、「xsl:result-document」を使用しました。変換が失敗した場合、すべての出力ファイルを削除する必要があります。しかし、「xsl:result-document」によって作成されたドキュメントの生成が失敗した場合、私のプログラムはこのドキュメントを削除できなくなりました。その理由は、「xsl:result-document」が別の OutputStream を作成するためだと思います。すべての出力ストリームを閉じる方法を知っている人はいますか?
編集: Saxon 9.5 を使用して変換を行います。
ソースコードについては、以下を参照してください。
public void simpleTransform(String sourcePath, String xsltPath, String outputPath)
{
String resultDir=outputPath+"/filename.html";
TransformerFactory tFactory = TransformerFactory.newInstance();
StreamSource ss = new StreamSource(new File(xsltPath));
StreamResult sr = new StreamResult(new File(resultDir));
Transformer transformer = tFactory.newTransformer(ss);
try
{
transformer.transform(new StreamSource(new File(sourcePath)), sr);
System.out.println("Transformation finished!");
}
catch (TransformerException te)
{
try
{
System.out.println("Transformation failed! Trying to close Outputstreams...");
sr.getOutputStream().flush();
sr.getOutputStream().close();
transformer.reset();
System.out.println("Outputstream closed!");
try
{
FileUtils.deleteDirectory(new File(tempDirPath));
System.out.println("Files succesfully deleted!");
}
catch(Exception e)
{
e.printStackTrace();
}
}
catch(IOException e)
{
e.printStackTrace();
}
}
}