2008-12-12 18 views
9

¿Cómo se puede ignorar la situación de elementos inesperados en JAXB ans y obtener todo el otro tipo de javax.xml.bind.UnmarshalException?Cómo ignorar situación de elemento inesperado en JAXB?

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

Aviso que todavía quiero obtener el obj resultado del análisis XML.

Respuesta

10

La solución.

En JAXB implementar ValidationEventHandler así:

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; 
    } 

} 

Entonces

Unmarshaller u = ...; 

u.setEventHandler(new CustomValidationEventHandler()); 

u.unmarshal(new StringReader(xml)); 
+2

En mi caso "if (evt.getMessage(). Contains (" Elemento inesperado "))" debería ser "if (evt.getMessage(). ToLowerCase(). Contains (" elemento inesperado "))". No sé por qué, pero el mensaje del evento a veces aparece en minúsculas. – veysiertekin

+1

Esto no funciona. Todavía recibo el mismo error. –

Cuestiones relacionadas