Я использую метод 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 не может делать то, что я хочу.