バグなのかな?
Unmarshalで読み込まれるノードがダブっちゃう件ですが、ちょっと調べた結果、わかりました。JAX-B Compilationで生成されるファイルたちのうち、問題となるのは、BookDataTypeImpl.java でした。
このファイルは、book.xsd の bookData ノードに対応して生成される、実質のデータ・バインド実装コードを含むソース・ファイルです。
このソースの populateNodeArray メソッド内を見ると、
: if (name.equals("book") && namespace.equals("http://jkidd.com/book")) { super.setNodeVectorValue(0, n); } if (name.equals("book") && namespace.equals("http://jkidd.com/book")) { super.setNodeVectorValue(0, n); } :
と、同じコードがダブって生成されていました。これをひとつだけにすると、問題が解決しました。うーん、book.xsd 内の book 要素に対する属性の数だけ、コードがダブって生成されてしまったのだろうか? きっとバグでしょうね。
こういうのってどうにかしてフィードバックするのが良いのでしょうけど...