Class MessageHandlerErrorStrategyAdapter

  • All Implemented Interfaces:
    net.shibboleth.utilities.java.support.component.Component, net.shibboleth.utilities.java.support.component.DestructableComponent, net.shibboleth.utilities.java.support.component.InitializableComponent, org.opensaml.messaging.handler.MessageHandler

    public class MessageHandlerErrorStrategyAdapter
    extends org.opensaml.messaging.handler.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<org.opensaml.messaging.error.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 org.opensaml.messaging.handler.MessageHandler wrappedHandler
      The wrapped message handler.
    • Constructor Summary

      Constructors 
      Constructor Description
      MessageHandlerErrorStrategyAdapter​(org.opensaml.messaging.handler.MessageHandler messageHandler, List<org.opensaml.messaging.error.TypedMessageErrorHandler> typedErrorHandlers)
      Constructor.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected void doInvoke​(org.opensaml.messaging.context.MessageContext messageContext)
      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, setActivationCondition
      • Methods inherited from class net.shibboleth.utilities.java.support.component.AbstractInitializableComponent

        destroy, doDestroy, doInitialize, initialize, isDestroyed, isInitialized
      • Methods inherited from interface net.shibboleth.utilities.java.support.component.InitializableComponent

        initialize, isInitialized
    • Field Detail

      • log

        @Nonnull
        private org.slf4j.Logger log
        Logger.
      • wrappedHandler

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

        @Nonnull
        @NonnullElements
        private List<org.opensaml.messaging.error.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 Detail

      • MessageHandlerErrorStrategyAdapter

        public MessageHandlerErrorStrategyAdapter​(@Nonnull
                                                  org.opensaml.messaging.handler.MessageHandler messageHandler,
                                                  @Nonnull @NonnullElements
                                                  List<org.opensaml.messaging.error.TypedMessageErrorHandler> typedErrorHandlers)
        Constructor.
        Parameters:
        messageHandler - the wrapped message handler
        typedErrorHandlers - the list of typed error handlers to apply
    • Method Detail

      • 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​(org.opensaml.messaging.context.MessageContext messageContext)
                         throws org.opensaml.messaging.handler.MessageHandlerException
        Specified by:
        doInvoke in class org.opensaml.messaging.handler.AbstractMessageHandler
        Throws:
        org.opensaml.messaging.handler.MessageHandlerException