J2SE 5.0 StreamResult(File) のバグ
Java で Transformer
を使用して XSL 処理を行う場合、transform()
の
Result
に new StreamResult(File)
を使用してファイルに変換結果を
出力する処理を J2SE 5.0 環境で動作させてみたところ、0 バイトのファイルが出来上がるだけで正しい変換結果が作成されなくなくなってしまった。File
の代わりに FileOutputStream
を使用してオープンとクローズを自前で行ってみたところ、今度は意図したとおりに動作した。
BugParade を調べてみたところ、どうやら J2SE 5.0 に付属している JAXP 実装から、内部で読み込んだファイルストリームが正しくクローズされなくなったようだ。
- StreamResult(File) does not close File after transform()
- Transformer.transform(source, result) does not close output stream
1. では再現不能という事になっているが、Unix 系のいくつかのファイルシステムではファイルをオープンしたまま削除が成功するのでこの評価は意味がないだろう。ファイルシステムに関連する報告で異なる OS を用いて評価する神経が分からない。
2. の結論としては「Result の挙動があいまいなので JAXP の次バージョンで論議する」という事になっている。一応 State は In progress, bug となっているので直す気はあるようだが、当分直らないようだ。 仕様的にはクローズされないという動きはアリなので、現在 transform() 終了後にさらに別の出力しているようなアプリケーションは互換が無くなるということを気にしているらしい (ファイルのオープン/クローズは内部に閉じているのに)。