2012-06-08 2 views
1

Я застрял на чем-то, что должно быть очень простым. У меня есть аннотированная анкета POJO Person (@XMLAttribute и @XMLElement в полях). Класс аннотируется как @XMLRootElement. Теперь у меня есть служба, которая выполняет запрос, возвращающий список этих экземпляров. Другими словами, я в конечном итоге сJAXB: список аннотированных аннотаций

List<Person> 

Я просто хочу, чтобы мобилизовывать этот список в XML, в выходной ответ моего сервлета.

Если я просто цикл по списку и маршалом каждый объект индивидуально:

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> 

Он не должен выводить дублирующие строки заголовка между записями.

С другой стороны, если я попытаюсь объединить весь список одним звонком: jaxbMarshaller.marshal (люди, вне);

я получаю следующее исключение:

javax.xml.bind.JAXBException: class java.util.ArrayList nor any of its super class is 
known to this context. 

Что такое «правильный» способ просто выстроить несколько экземпляров аннотированный POJO? Я предполагаю, что он должен быть завернут в другой «верхний» корневой элемент под названием «люди», а затем каждый пользовательский узел в качестве дочернего. Но как вы это делаете с JAXB?

С благодарностью

ответ

-1

Да, вы правы. вам нужно будет взять родительский элемент как СПИСОК, а затем попробуйте добавить значения лица в объект списка.

Смежные вопросы