Nit*_*tal 16 java exception-handling maven sonarqube sonarqube-5.0
我在我的程序中有以下代码片段,并且在与Maven集成之后,我正在运行SonarQube 5以进行代码质量检查.
然而,Sonar抱怨我应该记录或重新抛出此异常.
我在这里错过了什么?我还没有记录异常吗?
private boolean authenticate(User user) {
boolean validUser = false;
int validUserCount = 0;
try {
DataSource dataSource = (DataSource) getServletContext().getAttribute("dataSource");
validUserCount = new MasterDao(dataSource).getValidUserCount(user);
} catch (SQLException sqle) {
LOG.error("Exception while validating user credentials for user with username: " + user.getUsername() + " and pwd:" + user.getPwd());
LOG.error(sqle.getMessage());
}
if (validUserCount == 1) {
validUser = true;
}
return validUser;
}
Run Code Online (Sandbox Code Playgroud)
aba*_*rre 33
你应该这样做:
try {
DataSource dataSource = (DataSource) getServletContext().getAttribute("dataSource");
validUserCount = new MasterDao(dataSource).getValidUserCount(user);
} catch (SQLException sqle) {
LOG.error("Exception while validating user credentials for user with username: " +
user.getUsername() + " and pwd:" + user.getPwd(), sqle);
}
Run Code Online (Sandbox Code Playgroud)
声纳不应该打扰你了
声纳要求你做的是坚持整个异常对象.您可以使用以下内容:
try {
...
} catch (Exception e) {
logger.error("Error", e);
}
Run Code Online (Sandbox Code Playgroud)
我偶然发现了同样的问题。我不能 100% 确定我现在是否完全正确,但基本上您应该重新抛出或记录完整的异常。而e.getMessage()只提供详细消息,而不提供执行堆栈的快照。
throwable 包含其线程在创建时的执行堆栈的快照。它还可以包含一个消息字符串,提供有关错误的更多信息。随着时间的推移,一个 throwable 可以抑制其他 throwable 的传播。最后,该 throwable 还可以包含一个原因:另一个 throwable 导致该 throwable 被构造。这种因果信息的记录被称为链式异常设施,因为原因本身可以有一个原因,依此类推,导致异常“链”,每个异常都是由另一个异常引起的。
这意味着 abarre 提供的解决方案有效,因为整个异常对象 (sqle) 都被传递给记录器。
希望能帮助到你。干杯。
| 归档时间: |
|
| 查看次数: |
40793 次 |
| 最近记录: |