s:includeのバグ

Struts2のs:includeは便利に使えるのだが、バグがあった。8192バイトの境界に複数バイトのUTF-8文字跨ったものをincludeするとその文字が化けてしまうという問題。
これは s:incldueの内部で使用している FastByteArrayOutputStream というのがUTF-8複数バイト境界を考慮していなかったためのようだ。
作成中のページの文字化けの発見から、s:includeのバグとの結論に行き着くまでに大分時間を浪費してしまった。

で s:include のバグ情報として探したらすでに報告されていた。

https://issues.apache.org/struts/browse/WW-2412

しかし、固定長で扱うためにいちいちデコードするんじゃなくて、スッキリと可変サイズのバッファにすれば良いのに。

2.0.11.1でも直っていないので、パッチを当てておいたほうが良いだろう。