Programmers often suppress checked exceptions by catching exceptions with an empty or trivial catch
block. Each catch
block must ensure that the program continues only with valid invariants. Consequently, the catch
block must either recover from the exceptional condition, rethrow the exception to allow the next nearest enclosing catch
clause of a try
statement to recover, or throw an exception that is appropriate to the context of the catch
block.
...
The report()
method accepts a Throwable
instance and consequently handles all errors, checked exceptions, and unchecked exceptions. The filtering mechanism is based on a whitelisting approach wherein only non-sensitive exceptions are propagated to the user. Exceptions that are forbidden to appear in a log file can be filtered in the same fashion (see rule FIO13-J. Do not log sensitive information outside a trust boundary. This approach provides the benefits of exception chaining by reporting exceptions tailored to the abstraction while also logging the low-level cause for future failure analysis [Bloch 2008].
Noncompliant Code Example
...
This code prevents callers of the run()
method from determining that an interrupted exception occurred. Consequently, the caller methods such as Thread.start()
cannot act on the exception [Goetz 2006]. Likewise, if this code were called in its own thread, it would prevent the calling thread from knowing that the thread was interrupted.
...
Consequently, calling methods (or code from a calling thread) can determine that an interrupt was issued [Goetz 2006].
Exceptions
ERR00-EX0: Exceptions that occur during the freeing of a resource may be suppressed in those cases where failure to free the resource cannot affect future program behavior. Examples of freeing resources include closing files, network sockets, shutting down threads, and so forth. Such resources are often freed in catch
or finally
blocks and never reused during subsequent execution. Consequently, the exception cannot influence future program behavior through any avenue other than resource exhaustion. When resource exhaustion is adequately handled, it is sufficient to sanitize and log the exception for future improvement; additional error handling is unnecessary in this case.
...
ERR00-EX2: An InterruptedException
may be caught and suppressed when extending class Thread
[Goetz 2006]. An interruption request may also be suppressed by code that implements a thread's interruption policy [Goetz 2006, p. 143].
Risk Assessment
...
Bibliography
Item 65. Don't ignore exceptions; Item 62. Document all exceptions thrown by each method | |
5.4, Blocking and interruptible methods | |
[JLS 2005] |
...