きどたかのブログ

いつか誰かがこのブログからトラブルを解決しますように。

JAXBの予期しない要素(unexpected element)の話

アンマーシャラーで起きるやつの話。
この2カ月くらいで2回見た。


URIはこうなんだけど、localはこうだぜ的なやつ。

予期しない要素(URI:"http://www.example.org/a"、ローカル:"A")です。予期される要素は<{}A>です

これはわざと発生させた。
xsdからJAXBクラスを生成すると、通常は3種類くらいできるでしょ。

  1. Aクラス(今回対象のルートエレメントね)
  2. package-infoクラス
  3. 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を疑えということだろう。