fc2ブログ
ホーム   »  Java  »  J2SE 5.0 StreamResult(File) のバグ

J2SE 5.0 StreamResult(File) のバグ

既存のプログラムを J2SE 5.0 に移行した時にはまったバグ。

Java で Transformer を使用して XSL 処理を行う場合、transform()Resultnew StreamResult(File) を使用してファイルに変換結果を 出力する処理を J2SE 5.0 環境で動作させてみたところ、0 バイトのファイルが出来上がるだけで正しい変換結果が作成されなくなくなってしまった。File の代わりに FileOutputStream を使用してオープンとクローズを自前で行ってみたところ、今度は意図したとおりに動作した。

BugParade を調べてみたところ、どうやら J2SE 5.0 に付属している JAXP 実装から、内部で読み込んだファイルストリームが正しくクローズされなくなったようだ。

  1. StreamResult(File) does not close File after transform()
  2. Transformer.transform(source, result) does not close output stream

1. では再現不能という事になっているが、Unix 系のいくつかのファイルシステムではファイルをオープンしたまま削除が成功するのでこの評価は意味がないだろう。ファイルシステムに関連する報告で異なる OS を用いて評価する神経が分からない。

2. の結論としては「Result の挙動があいまいなので JAXP の次バージョンで論議する」という事になっている。一応 State は In progress, bug となっているので直す気はあるようだが、当分直らないようだ。 仕様的にはクローズされないという動きはアリなので、現在 transform() 終了後にさらに別の出力しているようなアプリケーションは互換が無くなるということを気にしているらしい (ファイルのオープン/クローズは内部に閉じているのに)。

コメント
トラックバック
トラックバック URL
コメントの投稿
管理者にだけ表示を許可する
Profile
Takami Torao
Takami Torao
C/C++ 使いだった 1996年、運命の Java と出会い現在に至る。のらアーキテクト。
Yah, this is image so I don't wanna eat spam, sorry!
Search

Google
MOYO Laboratory
Web

カテゴリー
最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
ブロとも申請フォーム
RSSフィード
リンク