У меня есть довольно большой повторяющийся XML для создания использования JAXB. Хранить целый объект в памяти затем делает маршалинг берет слишком много памяти. По существу мой XML похож на это:
<Store>
<item />
<item />
<item />
.....
</Store>
В настоящее время мое решение проблемы состоит в том, чтобы "трудно кодировать" корневой тег к потоку вывода и упорядочить каждый повторяющийся элемент один за другим:
aOutputStream.write("<?xml version="1.0"?>")
aOutputStream.write("<Store>")
foreach items as item
aMarshaller.marshall(item, aOutputStream)
end
aOutputStream.write("</Store>")
aOutputStream.close()
Так или иначе JAXB генерируют XML как это
<Store xmlns="http://stackoverflow.com">
<item xmlns="http://stackoverflow.com"/>
<item xmlns="http://stackoverflow.com"/>
<item xmlns="http://stackoverflow.com"/>
.....
</Store>
Хотя это - допустимый XML, но это просто выглядит ужасным, таким образом, я задаюсь вопросом, там какой-либо способ сказать marshaller не помещать пространство имен для элементов объекта? Или есть ли лучший способ использовать JAXB для сериализации к блоку XML блоком?
Проверьте свой package-info.java
(в пакете, где находятся ваши классы, аннотированные jaxb). Там есть атрибут пространства имен
для @XmlSchema
.
Кроме того, в аннотации @XmlRootElement
есть атрибут пространства имен
.
Если вы не укажете пространство имен, JaxB не будет его писать.
Вы можете использовать Stax на потоке, если ваша структура не слишком сложна.