要素の順番

wsdlで使われる2種類の要素、sequenceとall。
complexType要素の子要素となる。


今まで気にしたことがなかったが、今日初めて意味を知った。
sequenceは子要素がwsdlに記述されている順番に並ぶことを要求する。
allはそれが順不同でもかまわない。


axis2のjava2wsdlツールで生成したwsdlはsequenceが使われるらしい。


それはいいんだが、問題はwsdl2javaで生成したコードの方。
これまでsequenceを使用していた時は問題なかった。
minOccurs="1"と指定した要素が欠落していればデシリアライズ時にエラーにしてくれていた。
ところがallにしたらそれがエラーにならなくなった。
欠落した要素に対応するメンバは初期値のままデシリアライズされてしまう。


これは仕方ないことなの?
axis2のバグ?


仕方ないので自動生成したコードに手を入れて必須の要素がなければエラーにするようにした。
これでもうwsdlに変更があっても自動生成は使えないな・・・


wsdl2javaのソースをちらっと見てみたが、ここらへんのコードを生成してるのがどこだかまったくわからなかった。
今度時間ができた時にじっくり見てみよう。