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からXML関連のライブラリがJavaの標準ライブラリに含まれている。
- JavaのバージョンとAxis2 - 黒い猫の開発日記
http://d.hatena.ne.jp/cats_mew/20090812/1250048027
- JavaのバージョンとAxis2 - 黒い猫の開発日記
それで実行環境を確認したところ
- エラーの出る環境はJava 1.6でjavax.xml.stream.XMLStreamReaderにJavaの標準ライブラリのものを使用していた。
- エラーの出ない環境ではAxis2に同梱のものを使っていた。
結果として、
Axis2に同梱のjarを使っていたほうが、動作が安定しているようだ。