Class CompositeException

  • All Implemented Interfaces:
    java.io.Serializable

    public final class CompositeException
    extends java.lang.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.
    See Also:
    Serialized Form
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.lang.Throwable cause  
      private java.util.List<java.lang.Throwable> exceptions  
      private java.lang.String message  
      private static long serialVersionUID  
    • Constructor Summary

      Constructors 
      Constructor Description
      CompositeException​(@NonNull java.lang.Iterable<? extends java.lang.Throwable> errors)
      Constructs a CompositeException with the given array of Throwables as the list of suppressed exceptions.
      CompositeException​(@NonNull java.lang.Throwable... exceptions)
      Constructs a CompositeException with the given array of Throwables as the list of suppressed exceptions.
    • Field Detail

      • exceptions

        private final java.util.List<java.lang.Throwable> exceptions
      • message

        private final java.lang.String message
      • cause

        private java.lang.Throwable cause
    • Constructor Detail

      • CompositeException

        public CompositeException​(@NonNull
                                  @NonNull java.lang.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:
        java.lang.IllegalArgumentException - if exceptions is empty.
      • CompositeException

        public CompositeException​(@NonNull
                                  @NonNull java.lang.Iterable<? extends java.lang.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:
        java.lang.IllegalArgumentException - if errors is empty.
    • Method Detail

      • getExceptions

        @NonNull
        public @NonNull java.util.List<java.lang.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

        @NonNull
        public @NonNull java.lang.String getMessage()
        Overrides:
        getMessage in class java.lang.Throwable
      • getCause

        @NonNull
        public @NonNull java.lang.Throwable getCause()
        Overrides:
        getCause in class java.lang.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 java.lang.Throwable
      • printStackTrace

        public void printStackTrace​(java.io.PrintStream s)
        Overrides:
        printStackTrace in class java.lang.Throwable
      • printStackTrace

        public void printStackTrace​(java.io.PrintWriter s)
        Overrides:
        printStackTrace in class java.lang.Throwable
      • printStackTrace

        private void printStackTrace​(CompositeException.PrintStreamOrWriter output)
        Special handling for printing out a CompositeException. Loops through all inner exceptions and prints them out.
        Parameters:
        output - stream to print to
      • size

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