1

私は非常に基本的なものにこだわっています。注釈付きの 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 でそれを行うにはどうすればよいでしょうか。

ありがとう

4

1 に答える 1

-1

はい、あなたは正しいです。親要素をLISTとして取得し、リストオブジェクトに人物の値を追加してみてください。

于 2012-06-08T09:50:03.240 に答える