#java #java-11
Вопрос:
Привет, у меня есть метод ниже, позволяющий решить одну критическую проблему с гидролокатором(определите и создайте специальное исключение вместо использования общего).
когда я удаляю «Исключение» и упоминаю выделенное исключение(исключение IOException, исключение SAXException, исключение ParserConfigurationException). В то время сонар поднимал серьезную проблему «используйте универсальный».
public Element createDomElement(String xmlRequest) throws Exception {
DocumentBuilder documentBuilder;
Document document = null;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newDefaultInstance();
dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
dbf.setNamespaceAware(true);
documentBuilder = dbf.newDocumentBuilder();
if (documentBuilder == null) {
throw new ABCException(null, "unexpected_error", "Error processing request", null,
INTERNAL_SERVER_ERROR);
}
synchronized (this) {
document = documentBuilder.parse(new ByteArrayInputStream(xmlRequest.getBytes(UTF_8)));
}
document.getDocumentElement().normalize();
return document.getDocumentElement();
}
Не уверен, как я могу решить, не могли бы вы, пожалуйста, кто-нибудь, помочь мне с этим.
Ответ №1:
Это потому, что в бросках отсутствует исключение ABCException? Не могли бы вы, пожалуйста, попробовать нижеприведенную подпись метода и запустить sonarqube?
public Element createDomElement(String xmlRequest) throws ParserConfigurationException, ABCException, SAXException, IOException {}
Правка 1
Подходы к решению этой проблемы
- Бросьте только исключение ABCException из метода createDomElement (). Обрабатывайте исключения rest в самом createDomElement (). Не уверен, что его рекомендовали.
public Element createDomElement(String xmlRequest) throws ABCException {
DocumentBuilder documentBuilder;
Document document = null;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newDefaultInstance();
try {
dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
} catch (ParserConfigurationException e) {
throw new ABCException(null, "Parser Error", "Error processing request", null,
"Parser Error : " e.getMessage());
}
//todo remaining part of method
}
- Рефакторинг кода и разделите метод createDomElement (), чтобы следовать единой ответственности. Этот подход выглядит лучше, чем первый. Проверьте этот ответ https://softwareengineering.stackexchange.com/a/264068
Комментарии:
1. Все еще получаю сообщение Рефакторинг этого метода, чтобы создать не более одного проверенного исключения вместо: исключение javax.xml.parsers.ParserConfigurationException, исключение org.xml.sax.SAXException, исключение java.io.IOException
2. Обновил свой ответ с возможными подходами