Axis2: Unexpected subelement

Axis2でスタブを使用したSOAPの呼び出しで、以下のようなエラーが発生した。

Caused by: org.apache.axis2.databinding.ADBException: Unexpected subelement element_name
	at 
xxx.xxx.xxxStub$xxxResponse$Factory.parse(xxx.java:nnnn)
	... n more

いろいろ試してみると以下が分かった。

  • SOAPのレスポンスでbase64Binaryを使っていた。(byte[]を返却している。)
  • 同じ環境で同じSOAP APIを呼んでもSOAPに渡すパラメーターの違いでエラーが出る場合と出ない場合がある。→違いはデータサイズ?バイナリデータが大きいと駄目とか?
  • 異なる環境でも試してみると、エラーが出ない環境もあった。(同じパラメーターでも)
  • エラーの出ているparse()では、javax.xml.stream.XMLStreamReader を使っている。

それで実行環境を確認したところ

  • エラーの出る環境はJava 1.6でjavax.xml.stream.XMLStreamReaderにJavaの標準ライブラリのものを使用していた。
  • エラーの出ない環境ではAxis2に同梱のものを使っていた。

結果として、

  • エラーの出る環境で、Axis2に同梱されている wstx-asl-3.2.4.jar を classpathに追加したら、直った。

Axis2に同梱のjarを使っていたほうが、動作が安定しているようだ。