Проверка с использованием JAXB и Stax для маршалирования XML-документа
Вопрос
Я создал 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-документы без нехватки памяти, поэтому, если есть лучший способ сделать это, дайте мне знать.
Решение
Некоторые реализации Stax, похоже, способны проверять выходные данные.Смотрите следующий ответ на аналогичный вопрос: