Какое исключение бросить при встрече с неожиданным текстом? - PullRequest
0 голосов
/ 01 мая 2018

Я читаю файл XML и на определенной позиции, которую я ожидаю (как часть контракта), прочитает <offset>nnnn</offset> (где nnnn - число). Я уже проверил, что это правильный, правильно сформированный XML. Но если в тот момент он не говорит <format>, значит, он нарушает контракт, и я хочу выбросить исключение. Какой ранее существующий класс исключений Java является наиболее подходящим для выброса в этом случае?

Ответы [ 3 ]

0 голосов
/ 01 мая 2018

Я уже проверил, что это правильный, правильно сформированный XML.

1) XML не будет действительным для XSD, который определяет, что элемент <offset> должен содержать число.

2) Если под капотом вы используете SAX, вы можете выбросить org.xml.sax.SAXParseException.
Это то, что на самом деле выбрасывается при сбое проверки XSD (javax.xml.validation.Validator.validate()).

В своем Javadoc говорится:

Инкапсулирует ошибку синтаксического анализа XML или предупреждение.

Чтобы клиент мог получить что-то вроде:

org.xml.sax.SAXParseException: значение 'xxx' из элемент 'offset' недопустим. Ожидается число

Обратите внимание, что IllegalArgumentException возможно, но я считаю его слишком широким.

0 голосов
/ 01 мая 2018

Спасибо за ответы, данные до сих пор. Я только что подумал о своем собственном ответе: InputMismatchException. Преимущество: его название точно описывает проблему. Недостаток: его Javadoc говорит, что он выбрасывается Scanner, что я не использую. Тем не менее, это, кажется, правильный выбор. Если кто-то считает, что это неподходящий класс исключений, пожалуйста, прокомментируйте.

0 голосов
/ 01 мая 2018

Я бы посоветовал структурировать код так, чтобы XML-файл / содержимое XML (в зависимости от того, что имеет смысл) было передано методу в качестве аргумента, а затем выведите IllegalArgumentException, если у файла XML нет требуемого элементы.

Вы также можете использовать InvalidStateException, если XML является более внутренним по отношению к приложению и / или лучше, чем IllegalArgumentException.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...