Как игнорировать непредвиденную элементную ситуацию в JAXB?

Как можно игнорировать непредвиденную ситуацию с элементами в JAXB, и все же получить все другие виды исключений javax.xml.bind.UnmarshalException?

obj = unmler.unmarshal(new StringReader(xml))

Обратите внимание, что я все еще хочу получить результат obj при разборе xml.

12.12.2008 11:33:55
2 ОТВЕТА
РЕШЕНИЕ

Решение.

В JAXB реализация ValidationEventHandler выглядит так:

class CustomValidationEventHandler implements ValidationEventHandler{

    public boolean handleEvent(ValidationEvent evt) {
        System.out.println("Event Info: "+evt);
        if(evt.getMessage().contains("Unexpected element"))
            return true;
        return false;
    }

}

затем

Unmarshaller u = ...;

u.setEventHandler(new CustomValidationEventHandler());

u.unmarshal(new StringReader(xml));
12
13.12.2011 15:07:14
В моем случае "if (evt.getMessage (). Содержит (" неожиданный элемент "))" должен быть ", если (evt.getMessage (). ToLowerCase (). Содержит (" неожиданный элемент "))". Я не знаю почему, но сообщение о событии иногда появляется в нижнем регистре.
veysiertekin 1.08.2014 07:49:34
Осторожно - сообщение об ошибке локализуемо (зависит от Locale.getDefaultLocale()) !! Например, с Locale.GERMANего «Элементом unerwartetes».
jannis 26.04.2018 14:03:01

Кроме того, JAXB 2.0 автоматически игнорирует нераспознанные элементы и продолжает процесс демаршаллинга. См. Https://jaxb.java.net/nonav/jaxb20-fcs/docs/api/javax/xml/bind/Unmarshaller.html и перейдите к разделу «Проверка и корректность».

4
28.06.2013 16:44:12