更改方法抛出Java的异常类型

Dem*_*nto 2 java exception

我想要做的事情感觉反直觉,但Java一直让我感到惊讶,所以我试一试.

我正在ESAPI库的帮助下实现一个应用程序.该库提供了自己的例外.除了众所周知的异常行为之外,这些异常还会执行诸如使用log4j自动记录和向入侵检测模块提供信息之类的操作.

现在我想在我的应用程序的所有部分中使用这些功能.无论何时我的方法抛出异常,我都不会抛出正常的异常,而是从新的EnterpriseSecurityException扩展的自制异常.奇迹般有效.

但是,如果我使用一种抛出正常异常的方法,我该怎么办?假设我想使用java.io.FileInputStream读取文件?它找不到该文件并抛出FileNotFoundException.不幸的是,FileNotFoundException不提供我自己的异常的功能,因为它不会扩展EnterpriseSecurityException.

Java中是否有任何技巧可以更改方法抛出的异常?我写这篇文章时听起来很奇怪,但也许有人可以提出解决方案.到目前为止,我唯一的想法是捕获正常的异常,提取相关信息,并用它构建一个新的异常.但这看起来很粗糙......

Isa*_*ett 8

捕获异常,并抛出一个由延伸的新的EnterpriseSecurityException经过除旧到新,以把它们连在一起.

try {
    ...
} catch (FileNotFoundException e) {
    throw new CustomEnterpriseSecurityException(e);
}
Run Code Online (Sandbox Code Playgroud)

通过链接异常,您不会丢失原始异常的堆栈跟踪.


Rof*_*ion 5

你可以这样做。只需捕获原始异常并抛出您自己定义的适当异常,即可扩展EnterpriseSecurityException。确保链接异常,以免堆栈跟踪丢失。

例如,以您的文件打开示例为例:

 try {
      //open file
    } catch (FileNotFoundException e) {
       throw new YoureCustomException("This is your message", e);
    }
Run Code Online (Sandbox Code Playgroud)

  • 请不要删除堆栈跟踪数据。链接例外。 (3认同)