По сути, вместо создания полного дерева объектов с объектами-контейнерами вы хотите иметь возможность потоковой передачи коллекции экземпляров WorkSet для маршалинга с использованием JAXB.
Подход, который я выбрал бы, заключается в следующем:используйте XMLStreamWriter и упорядочите объекты WorkSet, обернув их в JAXBElement.Я не тестировал пример кода под рукой, поэтому вот пример грубого кода, который должен поставить вас на путь записи:
FileOutputStream fos = new FileOutputStream("foo.xml");
XMLStreamWriter writer = XMLOutputFactory.newFactory().createXMLStreamWriter(fos);
writer.writeStartDocument();
writer.writeStartElement("Import");
writer.writeStartElement("WorkSets");
JAXBContext context = JAXBContext.newInstance(WorkSet.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
for (WorkSet instance : instances)
{
JAXBElement<WorkSet> element = new JAXBElement<WorkSet>(QName.valueOf("WorkSet"), WorkSet.class, instance);
m.marshal(element, writer);
}
writer.writeEndDocument(); // this will close any open tags
writer.close();
Примечание: Вышеприведенное полностью не проверено иможет быть что-то напутано в оберточной части, чтобы написать каждый экземпляр WorkSet.Вам нужно обернуть экземпляры WorkSet, потому что они не будут помечены @XmlRootElement
, а в противном случае JAXB откажется маршалировать объекты.