Class 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 Details

    • log

      @Nonnull private org.slf4j.Logger log
    • wrappedHandler

      @Nonnull private MessageHandler wrappedHandler
      The wrapped message handler.
    • errorHandlers

      @Nonnull @NonnullElements 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 @NonnullElements List<TypedMessageErrorHandler> typedErrorHandlers)
      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

      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

      flag - true if should rethrow, false if not
    • doInvoke

      protected void doInvoke​(MessageContext messageContext) throws MessageHandlerException
      Performs the handler logic.
      Specified by:
      doInvoke in class AbstractMessageHandler
      messageContext - the message context on which to invoke the handler
      MessageHandlerException - if there is an error invoking the handler on the message context