JAXBの予期しない要素(unexpected element)の話
アンマーシャラーで起きるやつの話。
この2カ月くらいで2回見た。
URIはこうなんだけど、localはこうだぜ的なやつ。
予期しない要素(URI:"http://www.example.org/a"、ローカル:"A")です。予期される要素は<{}A>です
これはわざと発生させた。
xsdからJAXBクラスを生成すると、通常は3種類くらいできるでしょ。
- Aクラス(今回対象のルートエレメントね)
- package-infoクラス
- ObjectFactoryクラス
ここでpackege-infoを消したら、こういうのが出るよ。
@XmlSchemをもった子がいなくなったから、そういうことになる。
仮にxsdからの生成において、-npaでpackage-infoを作らない場合、
Aクラスの@XmlRootElementにnamespaceも入ってくる。
当然だが、その@XmlRootElementからnamespaceを削ると同じ事象に遭遇できる。
つまり、このメッセージが出たら、@XmlRootElementと、package-infoの@XmlSchemaの二ヶ所チェックが必要なんだろう。
ちょっとだけメッセージが違うこれ。
予期しない要素(URI:"http://www.example.org/a"、ローカル:"A")です。予期される要素は(none)です
これは@XmlRootElementそのものを削った場合にこういうことになる。
noneと出たら@XmlRootElementを疑えということだろう。