Ich verwende JAXB XMLadapter, um boolesche Werte zu marshalieren und zu entfernen. Auf die XML-Datei der Anwendung wird auch von der C# -Anwendung zugegriffen. Wir müssen diese XML-Datei validieren, und dies geschieht mit XSD. C# -Anwendung schreibt "True" -Wert für boolesche Knoten. Aber das Gleiche wird von unserem XSD bestätigt, da es nur "wahr/falsch" oder "1/0" erlaubt. Also haben wir String für boolesche Werte in XSD behalten und dieser String wird von XMLAdapter validiert, um auf unserer Seite marshalen und unmarshalen zu können. Der XML-Adapter ist wie folgt: JAXB XMLAdapter-Methode löst keine Ausnahme aus
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();
}
}
Der obige Code in normalen Bedingungen funktioniert, aber wenn ungültige Daten (zB: "abcd" oder "") aus XML-Datei gelesen wird, dann ist die „throw new Exception(); " wird nicht weitergegeben und der Unmarshal-Prozess wird fortgesetzt, um den nächsten Knoten zu lesen. Ich möchte, dass die Anwendung beendet wird, sobald eine Ausnahme ausgelöst wird. Es scheint, dass meine Ausnahme weg gegessen wird. Jede Hilfe wird sehr geschätzt.
Wie wird das Problem gelöst?
Vielen Dank @ npe: Das hat funktioniert ..! :) wusste nicht viel über ValidationEventHandler(), aber Ihre Zeiger auf JavaDoc halfen sehr. Nur Einstellung unmarshaller.setEventHandler (new DefaultValidationEventHandler()); hat die Arbeit .. Kennzeichnung Ihrer Lösung als eine Antwort .. Prost ..! –