Package org.opensaml.messaging.handler.impl

# Class MessageHandlerErrorStrategyAdapter

java.lang.Object
net.shibboleth.shared.component.AbstractInitializableComponent
org.opensaml.messaging.handler.AbstractMessageHandler
org.opensaml.messaging.handler.impl.MessageHandlerErrorStrategyAdapter

All Implemented Interfaces:
  `Component`, `DestructableComponent`, `InitializableComponent`, `MessageHandler`

public class MessageHandlerErrorStrategyAdapter extends AbstractMessageHandler
A `MessageHandler` which wraps and invokes another handler, catches any `Throwable` which is thrown by the wrapped handler's `MessageHandler.invoke(MessageContext)`, and applies a list of configured `TypedMessageErrorHandler` strategies.

The configured error handlers are iterated in the supplied order, and each will be given an opportunity to handle the error if the thrown `Throwable` is an instance a type supported by the error handler, as determined by `TypedMessageErrorHandler.handlesError(Throwable)`. This iteration is essentially a "dynamic catch block". The first handler to indicate it has handled the error via the return value of `MessageErrorHandler.handleError(Throwable, MessageContext)` terminates the error handler iteration.

A configured error handler may simply adjust or decorate the `MessageContext` with additional information (e.g. to register a SOAP fault on behalf of a non-SOAP aware handler), or it may itself directly emit an error response in a protocol- or technology-specific manner.

Whether the thrown `Throwable` is rethrown by this handler is determined by the flags `setRethrowIfHandled(boolean)` and `setRethrowIfNotHandled(boolean)`.

## Field Summary

Fields
Modifier and Type
Field
Description
`private List<TypedMessageErrorHandler>`
`errorHandlers`
The list of typed error handlers.
`private org.slf4j.Logger`
`log`
Logger.
`private boolean`
`rethrowIfHandled`
Flag indicating whether the wrapped handler's exception should be rethrown after being handled successfully.
`private boolean`
`rethrowIfNotHandled`
Flag indicating whether the wrapped handler's exception should be rethrown if not handled successfully by any configured error handler.
`private MessageHandler`
`wrappedHandler`
The wrapped message handler.

## Constructor Summary

Constructors
Constructor
Description
`MessageHandlerErrorStrategyAdapter(MessageHandler messageHandler, List<TypedMessageErrorHandler> typedErrorHandlers)`
Constructor.

## Method Summary

Modifier and Type
Method
Description
`protected void`
`doInvoke(MessageContext messageContext)`
Performs the handler logic.
`void`
`setRethrowIfHandled(boolean flag)`
Set whether to rethrow the error if it is successfully handled by one of the configured `TypedMessageErrorHandler`.
`void`
`setRethrowIfNotHandled(boolean flag)`
Set whether to rethrow the error if it is NOT successfully handled by any of the configured `TypedMessageErrorHandler`.

### Methods inherited from class org.opensaml.messaging.handler.AbstractMessageHandler

`doPostInvoke, doPostInvoke, doPreInvoke, getActivationCondition, getLogPrefix, invoke, isPreInvokeCalled, setActivationCondition`

### Methods inherited from class net.shibboleth.shared.component.AbstractInitializableComponent

`checkComponentActive, checkSetterPreconditions, destroy, doDestroy, doInitialize, ifDestroyedThrowDestroyedComponentException, ifInitializedThrowUnmodifiabledComponentException, ifNotInitializedThrowUninitializedComponentException, initialize, isDestroyed, isInitialized`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface net.shibboleth.shared.component.InitializableComponent

`initialize, isInitialized`

## Field Details

### log

@Nonnull private org.slf4j.Logger log
Logger.

### wrappedHandler

@Nonnull private MessageHandler wrappedHandler
The wrapped message handler.

### errorHandlers

@Nonnull private List<TypedMessageErrorHandler> errorHandlers
The list of typed error handlers.

### rethrowIfHandled

private boolean rethrowIfHandled
Flag indicating whether the wrapped handler's exception should be rethrown after being handled successfully.

### rethrowIfNotHandled

private boolean rethrowIfNotHandled
Flag indicating whether the wrapped handler's exception should be rethrown if not handled successfully by any configured error handler.

## Constructor Details

### MessageHandlerErrorStrategyAdapter

public MessageHandlerErrorStrategyAdapter(@Nonnull MessageHandler messageHandler, @Nonnull List<TypedMessageErrorHandler> typedErrorHandlers)
Constructor.

Parameters:
  `messageHandler` - the wrapped message handler
  `typedErrorHandlers` - the list of typed error handlers to apply

## Method Details

### setRethrowIfHandled

public void setRethrowIfHandled(boolean flag)
Set whether to rethrow the error if it is successfully handled by one of the configured `TypedMessageErrorHandler`.

Default is: false

Parameters:
  `flag` - true if should rethrow, false if not

### setRethrowIfNotHandled

public void setRethrowIfNotHandled(boolean flag)
Set whether to rethrow the error if it is NOT successfully handled by any of the configured `TypedMessageErrorHandler`.

Default is: true

Parameters:
  `flag` - true if should rethrow, false if not

### doInvoke

protected void doInvoke(@Nonnull MessageContext messageContext) throws MessageHandlerException
Performs the handler logic.

Specified by:
  `doInvoke` in class `AbstractMessageHandler`
Parameters:
  `messageContext` - the message context on which to invoke the handler
Throws:
  `MessageHandlerException` - if there is an error invoking the handler on the message context