JAXB пропускает недопустимые элементы и продолжает обработку - PullRequest
1 голос
/ 26 февраля 2020

У меня есть приложение, которое должно обрабатывать XML файлы в следующем формате:

<records>
    <record/>
    <record/>
    <record/>
    ...
</records>

Я использую JAXB для анализа этих файлов. Однако я пытаюсь подготовить свое приложение к неизбежному событию, когда невозможно проанализировать одну из записей из-за некоторых недопустимых данных (например, символа, где должен быть int).

Проблема в том, что если JAXB не может проанализировать отдельную запись, он останавливает обработку файла весь . Это не хорошо - мне нужно только пропустить проблемную запись c, сообщить о ней и двигаться дальше. Однако я не могу найти какой-либо способ сделать это. Единственное, что я нашел, это ValidationEventHandler, который позволяет мне возвращать true, сообщая JAXB продолжить обработку файла в случае ошибки, но проблема в том, что он на самом деле не SKIP проблемная запись c - она ​​пытается проанализировать ее, хотя известно, что она недействительна, что вызывает NumberFormatException и останавливает обработку.

Я нашел этот ответ Как пропустить проверку одного элемента jaxb, содержащегося в коллекции jaxb в Spring Batch Job? но на самом деле он не отвечает на вопрос, просто предлагает использовать ValidationEventHandler хотя этой функциональности недостаточно.

Как я могу пропустить недействительные записи и продолжить обработку? Как я могу решить эту проблему?

1 Ответ

1 голос
/ 26 февраля 2020

Обычно я бы не использовал JAXB, если бы знал, что входные данные, скорее всего, будут содержать ошибки, и мне нужно изящно восстановить ... STAX может быть лучше. Но у Jaxb есть «все», который вы можете использовать: https://docs.oracle.com/javase/7/docs/api/javax/xml/bind/annotation/XmlAnyElement.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...