Как игнорировать непредвиденную элементную ситуацию в JAXB? - PullRequest
9 голосов
/ 12 декабря 2008

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

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

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

Ответы [ 2 ]

11 голосов
/ 12 декабря 2008

Решение.

В 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));
4 голосов
/ 28 июня 2013

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

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