Проверка с использованием JAXB и Stax для упорядочения XML-документа - PullRequest
8 голосов
/ 18 марта 2010

Я создал схему XML (foo.xsd) и использовал xjc для создания классов привязки для JAXB. Допустим, корневым элементом является collection, и я пишу N document объектов, которые являются сложными типами.

Поскольку я планирую записывать большие файлы XML, я использую Stax для записи корневого элемента collection, а JAXB - для сортировки поддеревьев документов с использованием Marshaller.marshal(JAXBElement, XMLEventWriter). Это подход, рекомендуемый неофициальным руководством пользователя jaxb .

Мой вопрос: как я могу проверить XML, пока он распределяется? Если я связываю схему с маршаллером JAXB (используя Marshaller.setSchema()), я получаю ошибки валидации, потому что я только маршаллизирую поддерево (это жалуется, что он не видит корневой элемент collection "). Я предполагаю, что я действительно хочу сделать, это связать схему с Stax XMLEventWriter или что-то в этом роде.

Любые комментарии по этому общему подходу будут полезны. По сути, я хочу иметь возможность использовать JAXB для маршалинга и демарширования больших XML-документов без нехватки памяти, поэтому, если есть лучший способ сделать это, дайте мне знать.

1 Ответ

3 голосов
/ 21 марта 2010

Некоторые реализации Stax, кажется, способны проверять вывод. Смотрите следующий ответ на похожий вопрос:

Использование Stax2 с Woodstox

...