multipart

より

PellMultiPartRequestのコメントには「問題を引き起こす場合がある・・・」といった感じのことが書いてあってちょっと怖いんですけど、まぁ動いているのでよしとします。

確かにPellMultiPartRequestクラスではエンコーディング指定はコメントアウトされている。
これはbeta2のころからされていて、todoとして

//todo: configuration in xwork needs to support non-action level config

このようにアクションレベル以外のエンコーディング指定をサポートする必要があると書いてあった。
なのでWebWork2の正式リリースには対応してるだろうと思っていたのだけどされていなかった。
なぜかと思ってPellのMultiPartRequestを調べてみると
1.20はsetEncodingメソッドがstaticになっておりインスタンスごとに指定できなかった。
なので他のスレッドからエンコーディング指定が変えられると内部的に困るようだ。
具体的には

If setEncoding() is called by another thread, then subsequent string conversions
in the private parse() method will utilise this new encoding, which will cause serious
problems.

となっており
入力ストリームをparseメソッドでreadLineしてそれをパースする時に
static変数のcharEncodingを毎回見に行っているため、途中で変えられると困るということだ。
つまりアプリケーションでエンコーディング指定を統一して毎回同じエンコーディングを指定していれば問題は起こらない・・・はず。

現在最新の1.30rc1ではsetEncodingはインスタンスメソッドに変わっておりこの問題は解決できると思われる。
なのでWebWork側は恐らくPellのMultiPartRequest1.30の正式リリースを待っているのではと思う。
しかしPellのMultiPartRequestは「Oct 14, 2003 23:25」から更新されていない様子。
いつ正式版がリリースされることやら・・・。