Я использую JAXB XMLadapter для маршалинга и демаршалирования логических значений. XML-файл приложения также будет доступен для приложения C#. Мы должны проверить этот файл XML, и это делается с помощью XSD. Приложение C# записывает значение "True" для логических узлов. Но то же самое проверяется нашим XSD, поскольку он допускает только «истина/ложь» или «1/0». Таким образом, мы сохранили String для логических значений в XSD, и эта строка будет проверена XMLAdapter для маршалинга и демаршалирования на нашей стороне. Адаптер XML выглядит следующим образом:
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();
}
}
Вышеприведенный код работает в нормальных условиях, но когда из файла xml считываются недопустимые данные (например: "abcd" или ""), то "throw new Exception();" не распространяется, и процесс Unmarshal переходит к чтению следующего узла. Я хочу, чтобы приложение останавливалось, как только возникает исключение. Кажется, мое исключение съедают. Любая помощь горячо приветствуется.
Как решить эту проблему?