私は非常に基本的なものにこだわっています。注釈付きの Person POJO があります (フィールドの @XMLAttribute および @XMLElement 注釈)。クラスには @XMLRootElement という注釈が付けられます。これで、これらのインスタンスのリストを返すクエリを実行するサービスができました。言い換えれば、私は
List<Person>
このリストをサーブレットの応答出力にマーシャリングしたいだけです。
リストをループして各オブジェクトを個別にマーシャリングすると、次のようになります。
for(Person person : people){
jaxbMarshaller.marshal(person, out);
}
ドキュメント全体を複数回出力します(レコードごとに複数のxmlヘッダー行になります):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<person>
<name>Bob</name>
</person>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<person>
<name>Gary</name>
</person>
レコード間で重複するヘッダー行を出力するべきではありません。
一方、リスト全体を 1 回の呼び出しでマーシャリングしようとすると、jaxbMarshaller.marshal(people, out); となります。
次の例外が発生します。
javax.xml.bind.JAXBException: class java.util.ArrayList nor any of its super class is
known to this context.
注釈付きPOJOの複数のインスタンスを単純にマーシャリングする「正しい」方法は何ですか? 「人」と呼ばれる別の「上位」ルート要素にラップし、次に各人ノードを子としてラップする必要があると思います。しかし、JAXB でそれを行うにはどうすればよいでしょうか。
ありがとう