Class ThrowableAnalyzer


  • public class ThrowableAnalyzer
    extends java.lang.Object
    Handler for analyzing Throwable instances. Can be subclassed to customize its behavior.
    Since:
    2.0
    • Constructor Summary

      Constructors 
      Constructor Description
      ThrowableAnalyzer()
      Creates a new ThrowableAnalyzer instance.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      java.lang.Throwable[] determineCauseChain​(java.lang.Throwable throwable)
      Determines the cause chain of the provided Throwable.
      java.lang.Throwable getFirstThrowableOfType​(java.lang.Class<? extends java.lang.Throwable> throwableType, java.lang.Throwable[] chain)
      Returns the first throwable from the passed in array that is assignable to the provided type.
      protected void initExtractorMap()
      Initializes associations between Throwables and ThrowableCauseExtractors.
      protected void registerExtractor​(java.lang.Class<? extends java.lang.Throwable> throwableType, ThrowableCauseExtractor extractor)
      Registers a ThrowableCauseExtractor for the specified type.
      static void verifyThrowableHierarchy​(java.lang.Throwable throwable, java.lang.Class<? extends java.lang.Throwable> expectedBaseType)
      Verifies that the provided throwable is a valid subclass of the provided type (or of the type itself).
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • DEFAULT_EXTRACTOR

        public static final ThrowableCauseExtractor DEFAULT_EXTRACTOR
        Default extractor for Throwable instances.
        See Also:
        Throwable.getCause()
      • INVOCATIONTARGET_EXTRACTOR

        public static final ThrowableCauseExtractor INVOCATIONTARGET_EXTRACTOR
        Default extractor for InvocationTargetException instances.
        See Also:
        InvocationTargetException.getTargetException()
    • Constructor Detail

      • ThrowableAnalyzer

        public ThrowableAnalyzer()
        Creates a new ThrowableAnalyzer instance.
    • Method Detail

      • registerExtractor

        protected final void registerExtractor​(java.lang.Class<? extends java.lang.Throwable> throwableType,
                                               ThrowableCauseExtractor extractor)
        Registers a ThrowableCauseExtractor for the specified type. Can be used in subclasses overriding initExtractorMap().
        Parameters:
        throwableType - the type (has to be a subclass of Throwable)
        extractor - the associated ThrowableCauseExtractor (not null)
        Throws:
        java.lang.IllegalArgumentException - if one of the arguments is invalid
      • initExtractorMap

        protected void initExtractorMap()
        Initializes associations between Throwables and ThrowableCauseExtractors. The default implementation performs the following registrations:
        Subclasses overriding this method are encouraged to invoke the super method to perform the default registrations. They can register additional extractors as required.

        Note: An extractor registered for a specific type is applicable for that type and all subtypes thereof. However, extractors registered to more specific types are guaranteed to be resolved first. So in the default case InvocationTargetExceptions will be handled by INVOCATIONTARGET_EXTRACTOR while all other throwables are handled by DEFAULT_EXTRACTOR.

        See Also:
        registerExtractor(Class, ThrowableCauseExtractor)
      • determineCauseChain

        public final java.lang.Throwable[] determineCauseChain​(java.lang.Throwable throwable)
        Determines the cause chain of the provided Throwable. The returned array contains all throwables extracted from the stacktrace, using the registered extractors. The elements of the array are ordered: The first element is the passed in throwable itself. The following elements appear in their order downward the stacktrace.

        Note: If no ThrowableCauseExtractor is registered for this instance then the returned array will always only contain the passed in throwable.

        Parameters:
        throwable - the Throwable to analyze
        Returns:
        an array of all determined throwables from the stacktrace
        Throws:
        java.lang.IllegalArgumentException - if the throwable is null
        See Also:
        initExtractorMap()
      • getFirstThrowableOfType

        public final java.lang.Throwable getFirstThrowableOfType​(java.lang.Class<? extends java.lang.Throwable> throwableType,
                                                                 java.lang.Throwable[] chain)
        Returns the first throwable from the passed in array that is assignable to the provided type. A returned instance is safe to be cast to the specified type.

        If the passed in array is null or empty this method returns null.

        Parameters:
        throwableType - the type to look for
        chain - the array (will be processed in element order)
        Returns:
        the found Throwable, null if not found
        Throws:
        java.lang.IllegalArgumentException - if the provided type is null or no subclass of Throwable
      • verifyThrowableHierarchy

        public static void verifyThrowableHierarchy​(java.lang.Throwable throwable,
                                                    java.lang.Class<? extends java.lang.Throwable> expectedBaseType)
        Verifies that the provided throwable is a valid subclass of the provided type (or of the type itself). If expectdBaseType is null, no check will be performed.

        Can be used for verification purposes in implementations of extractors.

        Parameters:
        throwable - the Throwable to check
        expectedBaseType - the type to check against
        Throws:
        java.lang.IllegalArgumentException - if throwable is either null or its type is not assignable to expectedBaseType