Class CompositeException

java.lang.Object
java.lang.Throwable
java.lang.Exception
java.lang.RuntimeException
com.linecorp.armeria.common.util.CompositeException
All Implemented Interfaces:
Serializable

public final class CompositeException extends RuntimeException
Represents an exception that is a composite of one or more other exceptions. A CompositeException does not modify the structure of any exception it wraps, but at print-time it iterates through the list of Throwables contained in the composite in order to print them all.

Its invariant is to contain an immutable, ordered (by insertion order), unique list of non-composite exceptions. You can retrieve individual exceptions in this list with getExceptions().

The printStackTrace() implementation handles the StackTrace in a customized way instead of using getCause() so that it can avoid circular references.

If you invoke getCause(), it will lazily create the causal chain but will stop if it finds any Throwable in the chain that it has already seen.

If the inner exception is sampled by Flags.verboseExceptionSampler(), full stack traces are captured. Otherwise, only 20 stack frames are preserved by default.

See Also:
  • Constructor Details

    • CompositeException

      public CompositeException(Throwable... exceptions)
      Constructs a CompositeException with the given array of Throwables as the list of suppressed exceptions.
      Parameters:
      exceptions - the Throwables to have as initially suppressed exceptions
      Throws:
      IllegalArgumentException - if exceptions is empty.
    • CompositeException

      public CompositeException(Iterable<? extends Throwable> errors)
      Constructs a CompositeException with the given array of Throwables as the list of suppressed exceptions.
      Parameters:
      errors - the Throwables to have as initially suppressed exceptions
      Throws:
      IllegalArgumentException - if errors is empty.
  • Method Details

    • getExceptions

      public List<Throwable> getExceptions()
      Retrieves the list of exceptions that make up the CompositeException.
      Returns:
      the exceptions that make up the CompositeException, as a List of Throwables
    • getMessage

      public String getMessage()
      Overrides:
      getMessage in class Throwable
    • getCause

      public Throwable getCause()
      Overrides:
      getCause in class Throwable
    • printStackTrace

      public void printStackTrace()
      All of the following printStackTrace functionality is derived from JDK Throwable printStackTrace. In particular, the PrintStreamOrWriter abstraction is copied wholesale.

      Changes from the official JDK implementation:

      • no infinite loop detection
      • smaller critical section holding PrintStream lock
      • explicit knowledge about the exceptions List that this loops through
      Overrides:
      printStackTrace in class Throwable
    • printStackTrace

      public void printStackTrace(PrintStream s)
      Overrides:
      printStackTrace in class Throwable
    • printStackTrace

      public void printStackTrace(PrintWriter s)
      Overrides:
      printStackTrace in class Throwable
    • size

      public int size()
      Returns the number of suppressed exceptions.
      Returns:
      the number of suppressed exceptions