unmarshal parse jaxbunmarshaller example convert bean java jaxb unmarshalling xmladapter

parse - unmarshalling java



El método JAXB XMLAdapter no arroja excepciones (1)

Del XMLAdapter#unmarshal(ValueType) de XMLAdapter#unmarshal(ValueType) :

Lanza: java.lang.Exception - si hay un error durante la conversión. La persona que llama es responsable de informar el error al usuario a través de ValidationEventHandler .

Por lo tanto, sí, la excepción se come y luego se informa utilizando ValidationEventHandler , no arrojado a la parte superior de la pila.

Comprueba si ya estás utilizando (personalizado, tal vez) ValidationEventHandler que agrupa tus excepciones, o usa DefaultValidationEventHandler , así:

unmarshaller.setEventHandler(new DefaultValidationEventHandler());

Causará fallas de desasignación en el primer error.

Estoy utilizando JAXB XMLadapter para calcular y eliminar los valores booleanos. También se accederá al archivo XML de la aplicación mediante la aplicación C #. Tenemos que validar este archivo XML y esto se hace usando XSD. La aplicación C # escribe el valor "Verdadero" para los nodos booleanos. Pero lo mismo valida nuestro XSD, ya que solo permite "verdadero / falso" o "1/0". Así que hemos mantenido String para los valores booleanos en XSD y esa cadena será validada por XMLAdapter para obtener el Mariscal y el Mariscal de nuestro lado. El adaptador XML es el siguiente:

public class BooleanAdapter extends XmlAdapter<String, Boolean> { @Override public Boolean unmarshal(String v) throws Exception { if(v.equalsIgnoreCase("true") || v.equals("1")) { return true; } else if(v.equalsIgnoreCase("false") || v.equals("0")) { return false; } else { throw new Exception("Boolean Value from XML File is Wrong."); } } @Override public String marshal(Boolean v) throws Exception { return v.toString(); } }

El código anterior funciona en condiciones normales, pero cuando se leen datos no válidos (p. Ej .: "abcd" o "") del archivo xml, aparece el mensaje "throw new Exception ();" no se propaga y el proceso Unmarshal pasa a leer el siguiente nodo. Quiero que la aplicación se detenga tan pronto como se lanza una excepción. Parece que mi Excepción está siendo devorada. Cualquier ayuda es muy apreciada.

¿Cómo resolver este problema?