Есть ли способ заменить неверные данные XML при демаршалировании в Java объект? - PullRequest
0 голосов
/ 21 апреля 2020

Я использую метод JAXB unmarshal для преобразования XML данных в java объекты. Код работает, но когда в одном из тегов XML есть недопустимые данные, метод генерирует исключения и сразу останавливается, например,

org.springframework.oxm.UnmarshallingFailureException: JAXB unmarshalling exception; nested exception is javax.xml.bind.UnmarshalException
 - with linked exception:
[com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 2-byte UTF-8 sequence.]

org.springframework.oxm.UnmarshallingFailureException: JAXB unmarshalling exception; nested exception is javax.xml.bind.UnmarshalException
 - with linked exception:
[org.xml.sax.SAXParseException; lineNumber: 6; columnNumber: 45; An invalid XML character (Unicode: 0x1) was found in the element content of the document.]

Вместо того, чтобы сразу генерировать исключение, я хочу преобразовать XML Как можно больше данных, заменив недопустимые данные пробелом или пустой строкой (т.е. удалите их и продолжите).

Есть ли способ заставить unmarshaler сделать это?

Или еще попытка перехвата исключений была бы в порядке (менее идеальной), если есть способ, позволяющий демаршалеру продолжать с того места, где он остановился.

Очевидно, предварительно обработав XML, чтобы сначала удалить все недействительные данные, прежде чем произойдет демаршалинг другой способ, не предпочтительный, если нет другого способа, поскольку это просто означает обработку данных XML дважды.

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

1 Ответ

1 голос
/ 21 апреля 2020

Прежде всего, вы спрашиваете о XML, который не правильно сформирован , а не XML, который недействителен . XML, который не правильно сформирован, нарушает правила для XML (и технически не XML). Недопустимый XML просто нарушает правила, заданные схемой XML. См. Правильно сформированный и действительный XML для получения дополнительной информации.

Учитывая этот фон, легко увидеть проблему: XML, который не является правильно сформированным, даже не может быть проанализирован, поэтому все совместимые XML инструменты будут неэффективными. (Помните, что такие данные на самом деле даже не XML.) Что вам нужно сделать, так это исправить проблему у ее источника: исправить код, генерирующий «bad XML.»

При исправлении ошибки. код не возможен, тогда смотрите Как разобрать неверный (плохой / не правильно сформированный) XML?

...