2008-12-12 6 views
9

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

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

Уведомление: Я все еще хочу получить obj-результат анализа XML.

ответ

10

Решение.

В 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)); 
+2

В моем случае «if (evt.getMessage(). Содержит (« Неожиданный элемент »))« должно быть », если (evt.getMessage(). ToLowerCase() содержит (« неожиданный элемент »))». Я не знаю, почему, но сообщение о событии иногда встречается в нижнем регистре. – veysiertekin 2014-08-01 07:49:34