У меня есть приложение, которое должно обрабатывать XML файлы в следующем формате:
<records>
<record/>
<record/>
<record/>
...
</records>
Я использую JAXB для анализа этих файлов. Однако я пытаюсь подготовить свое приложение к неизбежному событию, когда невозможно проанализировать одну из записей из-за некоторых недопустимых данных (например, символа, где должен быть int).
Проблема в том, что если JAXB не может проанализировать отдельную запись, он останавливает обработку файла весь . Это не хорошо - мне нужно только пропустить проблемную запись c, сообщить о ней и двигаться дальше. Однако я не могу найти какой-либо способ сделать это. Единственное, что я нашел, это ValidationEventHandler
, который позволяет мне возвращать true
, сообщая JAXB продолжить обработку файла в случае ошибки, но проблема в том, что он на самом деле не SKIP проблемная запись c - она пытается проанализировать ее, хотя известно, что она недействительна, что вызывает NumberFormatException
и останавливает обработку.
Я нашел этот ответ Как пропустить проверку одного элемента jaxb, содержащегося в коллекции jaxb в Spring Batch Job? но на самом деле он не отвечает на вопрос, просто предлагает использовать ValidationEventHandler
хотя этой функциональности недостаточно.
Как я могу пропустить недействительные записи и продолжить обработку? Как я могу решить эту проблему?