Интересно, является ли использование IllegalStateException в этом сценарии хорошим выбором для разработки API.
Сценарий:
У меня есть функция, которая проверяет, правильно ли сформирован документ XML со следующей подписью:
public boolean isXMLDocumentWellFormed(InputStream inXMLDocument)
Эта функция использует следующий фрагмент для загрузки документа XML:
boolean isXMLDocWellFormed = false;
// Setup document builder
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory
.newInstance();
if (docBuilderFactory == null)
throw new IllegalStateException(
"The DocumentBuilderFactory cannot be instanciated");
try {
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
// Parse document
Document doc = docBuilder.parse(inXMLDocument);
if (doc != null)
isXMLDocWellFormed = true;
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new IllegalStateException(e);
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new IllegalStateException(e);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new IllegalStateException(e);
}
return isXMLDocWellFormed;
API разработан, чтобы быть очень простым в использовании. Однако я хотел бы предоставить пользователям API возможность узнать, почему документ XML не может быть проверен (пример: DocumentBuilderFactory не может создать объект DocumentBuilder ), не перегружая их тоннами проверенных исключений, с которыми им придется иметь дело.
Мои опасения по поводу этого дизайна:
a) Является ли использование одного единственного типа исключения (т.е. IllegalStateException) для возврата всех возможных перехваченных исключений, указывающих на невозможность выполнения проверки, хорошей идеей? Я бы сказал, что да, поскольку пользователи исключают 2 вещи из этой функции:
- Чтобы узнать, правильно ли сформирован документ XML.
- В случае, если функция не может вернуть ответ (например, из-за исключения), почему функция не смогла предоставить ответ.
b) Если ответ на a) отрицательный, то какое имя или решение будет наиболее подходящим и почему ?
С уважением,