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 de XML es el siguiente: El método JAXB XMLAdapter no arroja la excepción
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 los datos no válidos (por ejemplo: "ABCD" o "") se leen desde un archivo XML, entonces el "throw new Excepción(); " 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 se está desvaneciendo. Cualquier ayuda es muy apreciada.
Cómo resolver este problema?
Gracias @npe: ¡Eso funcionó ...! :) no sabía mucho sobre ValidationEventHandler() pero sus punteros a JavaDoc ayudaron mucho. Simplemente estableciendo unmarshaller.setEventHandler (nuevo DefaultValidationEventHandler()); hizo el trabajo .. Marcado de su solución como una respuesta .. Cheers ..! –