Java 错误:catch 块中抛出新异常,原始堆栈跟踪可能会丢失

use*_*114 7 java exception pmd rethrow

try {
    // code which throws exception.
} catch (SQLException sqlex) {
    logger.error("Custom message", sqlex);
    **throw new CustomApplicationException("Custom message", sqlex);**
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,在粗体线上,我收到 PMD 错误,因为“catch 块中引发了新异常,原始堆栈跟踪可能会丢失”。我知道这个问题已经被问过很多次了,也有很多在线参考资料可供参考。我已经尝试了所有可能的方法。但我仍然无法消除这个 PMD 错误。请让我知道这段代码有什么问题。提前致谢!

Ste*_*n C 6

我不认为该代码有什么问题。

但我也不认为 PMD 会/应该给出该代码的错误。IIRC,你会得到这样的错误:

try {
    // code which throws exception.
} catch (SQLException sqlex) {
    throw new CustomApplicationException("Custom message");  // no cause!
}
Run Code Online (Sandbox Code Playgroud)

您可能拥有旧版本的 PMD,或者有人一直在“改进”您正在使用的 PMD 规则。