try {
// code which throws exception.
} catch (SQLException sqlex) {
logger.error("Custom message", sqlex);
**throw new CustomApplicationException("Custom message", sqlex);**
}
在上面的示例中,在粗体的一行上,我得到了PMD错误,因为“在catch块中抛出了新的异常,原始堆栈跟踪可能会丢失”。我知道这个问题已经被问了很多次了,网上也有很多同样的参考资料。我已经尝试了所有可能的方法。但是我仍然不能删除这个PMD错误。请让我知道这个代码片段的错误之处。提前感谢!
发布于 2011-06-21 13:41:28
我不认为这段代码有什么问题。
但我也认为,PMD不会/不应该为该代码提供该错误。IIRC,你会得到类似这样的错误:
try {
// code which throws exception.
} catch (SQLException sqlex) {
throw new CustomApplicationException("Custom message"); // no cause!
}
您可能使用的是旧版本的PMD,或者有人一直在“改进”您正在使用的PMD规则。
发布于 2020-03-27 17:54:26
需要按如下方式修改异常类,以保留原始堆栈跟踪
try {
// code which throws exception.
} catch (SQLException sqlex) {
throw new CustomApplicationException("Any Message", sqlex);
}
CustomApplicationException.java
public class CustomApplicationException extends RuntimeException {
public CustomApplicationException() {
}
public CustomApplicationException(String message) {
super(message);
}
public CustomApplicationException(String message, Throwable cause) {
super(message, cause);
}
}
发布于 2011-06-21 13:50:00
代码检查器是用来发现问题的好东西。然而,在这种情况下,您的代码没有问题,而PMD可能保护过度了。请查看PMD中有关该错误的文档,看看是否还有其他您可能需要考虑的问题。然后,如果您仍然对您的代码满意,您可以向它添加一个//NOPMD标记,让PMD忽略该行。我不记得这是自动的,还是您必须配置PMD来查找//NOPMD。
注意,像这样的PMD检查的内联异常也不是真正推荐的,当然也不应该被视为最佳实践。但是,对于像PMD这样的代码检查器,由于某些原因,偶尔会出现一些您想要忽略的标志。
https://stackoverflow.com/questions/6420501
复制相似问题