JAXB сортирует много объектов в один файл - PullRequest
4 голосов
/ 21 января 2012

Я хочу упорядочить множество объектов в один XML-файл.Это идет хорошо, за исключением того, что мой маршаллер настаивает на добавлении дополнительных <?xml version="1.0" ?> перед каждым объектом.

  1. Каков предпочтительный способ маршалинга многих объектов в один файл?ничего больше, каков лучший способ избавиться от этих посторонних объявлений XML?

Мой текущий код:

JAXBContext jc = JAXBContext.newInstance(relevantClasses);
Marshaller m = jc.createMarshaller();

XMLOutputFactory xof = XMLOutputFactory.newFactory();
XMLStreamWriter xsw = xof.createXMLStreamWriter(Channels.newOutputStream(fileWriteChannel), "UTF-8");

xsw.writeStartDocument("UTF-8", "1");

m.marshal(object1, xsw);
m.marshal(object2, xsw);

xsw.close();

Это прекрасно работает, и я получаю <object1> и<object2> данные, которые я ожидаю ... у них просто есть дополнительный <?xml version="1.0" ?> перед каждым объектом.

Ответы [ 2 ]

6 голосов
/ 21 января 2012

XML-документ всегда имеет один корневой элемент, поэтому объединение нескольких объектов в один файл не приведет к правильному XML.

У вас должен быть один корневой объект с элементом Object1 и элементом Object2, и вы можете маршалировать этот корневой объект.

В противном случае документ API Маршаллера говорит:

Поддерживаемые свойства

[...]

jaxb.fragment - значение должно быть java.lang.Boolean Это свойство определяет, будут ли события уровня документагенерируется маршаллером.Если свойство не указано, по умолчанию используется значение false.Это свойство имеет различные значения в зависимости от того, какой маршал API вы используете - когда для этого свойства установлено значение true:

[...]

маршал (Object, XMLStreamWriter) - маршаллер не будетгенерировать события XMLStreamConstants.START_DOCUMENT и XMLStreamConstants.END_DOCUMENT.

0 голосов
/ 20 апреля 2017

Я думаю, что вы должны добавить рут, как

@XmlRootElement(name = "Name")
public class EntityName   {

}
...