activation.jar

webサービスから画像データを戻そうとしてはまった。
wsdlで型をbase64binaryにすればいいらしいことはわかった。
こうするとbeanの型がjavax.activation.DataHandlerという型になる。
しかしjava6では問題ないのにjava5ではシリアライズできなくてエラーになる。


DataHandlerクラスはてっきりactivation.jarの中にあるとばかり思っていたが、java6だとコアAPIの中に含まれてるんだね。
しかもactivation.jarのものとは実装が違うらしい。
だもんでクラスパスにactivation.jarがあってもjava6ではコアAPI内のクラスが優先されて結果が違っていた。


さてjava5でシリアライズするためにはどうするか?
・javax.activation.DataContentHandlerの実装クラスで単純に渡されたデータをバイト配列としてストリームに書き込むようにする。
・META-INF/mailcapというファイルを作り、対応するmimetypeと上記実装クラスの対応を記述する。
 image/*;; x-java-content-handler=クラス名
 みたいな?
これらのファイルを直接クラスパスに置くなりjarにしてクラスパスに設定するなりすればjava5でもシリアライズできるようになる。