public class

ThrowableAnalyzer

extends Object
java.lang.Object
   ↳ org.springframework.security.web.util.ThrowableAnalyzer

Class Overview

Handler for analyzing Throwable instances. Can be subclassed to customize its behavior.

Summary

Fields
public static final ThrowableCauseExtractor DEFAULT_EXTRACTOR Default extractor for Throwable instances.
public static final ThrowableCauseExtractor INVOCATIONTARGET_EXTRACTOR Default extractor for InvocationTargetException instances.
Public Constructors
ThrowableAnalyzer()
Creates a new ThrowableAnalyzer instance.
Public Methods
final Throwable[] determineCauseChain(Throwable throwable)
Determines the cause chain of the provided Throwable.
final Throwable getFirstThrowableOfType(Class<? extends Throwable> throwableType, Throwable[] chain)
Returns the first throwable from the passed in array that is assignable to the provided type.
static void verifyThrowableHierarchy(Throwable throwable, Class<? extends Throwable> expectedBaseType)
Verifies that the provided throwable is a valid subclass of the provided type (or of the type itself).
Protected Methods
void initExtractorMap()
Initializes associations between Throwables and ThrowableCauseExtractors.
final void registerExtractor(Class<? extends Throwable> throwableType, ThrowableCauseExtractor extractor)
Registers a ThrowableCauseExtractor for the specified type.
[Expand]
Inherited Methods
From class java.lang.Object

Fields

public static final ThrowableCauseExtractor DEFAULT_EXTRACTOR

Default extractor for Throwable instances.

See Also

public static final ThrowableCauseExtractor INVOCATIONTARGET_EXTRACTOR

Default extractor for InvocationTargetException instances.

Public Constructors

public ThrowableAnalyzer ()

Creates a new ThrowableAnalyzer instance.

Public Methods

public final Throwable[] determineCauseChain (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
IllegalArgumentException if the throwable is null

public final Throwable getFirstThrowableOfType (Class<? extends Throwable> throwableType, 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
IllegalArgumentException if the provided type is null or no subclass of Throwable

public static void verifyThrowableHierarchy (Throwable throwable, Class<? extends 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
IllegalArgumentException if throwable is either null or its type is not assignable to expectedBaseType

Protected Methods

protected void initExtractorMap ()

Initializes associations between Throwables and ThrowableCauseExtractors. The default implementation performs the following registrations:

  • DEFAULT_EXTRACTOR for Throwable
  • INVOCATIONTARGET_EXTRACTOR for InvocationTargetException

  • 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.

    protected final void registerExtractor (Class<? extends 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
    IllegalArgumentException if one of the arguments is invalid