/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. *--------------------------------------------------------------------------------------------*/ package com.github.copilot.sdk; /** * Controls how event dispatch behaves when an event handler throws an * exception. *
* This policy is set via * {@link CopilotSession#setEventErrorPolicy(EventErrorPolicy)} and determines * whether remaining event listeners continue to execute after a preceding * listener throws an exception. Errors are always logged at * {@link java.util.logging.Level#WARNING} regardless of the policy. * *
* The configured {@link EventErrorHandler} (if any) is always invoked * regardless of the policy — the policy only controls whether dispatch * continues after the error has been logged and the error handler has been * called. * *
* The naming follows the convention used by Spring Framework's * {@code TaskUtils.LOG_AND_SUPPRESS_ERROR_HANDLER} and * {@code TaskUtils.LOG_AND_PROPAGATE_ERROR_HANDLER}. * *
* Example: * *
{@code
* // Default: propagate errors (stop dispatch on first error, log the error)
* session.setEventErrorPolicy(EventErrorPolicy.PROPAGATE_AND_LOG_ERRORS);
*
* // Opt-in to suppress errors (continue dispatching, log each error)
* session.setEventErrorPolicy(EventErrorPolicy.SUPPRESS_AND_LOG_ERRORS);
* }
*
* @see CopilotSession#setEventErrorPolicy(EventErrorPolicy)
* @see EventErrorHandler
* @since 1.0.8
*/
public enum EventErrorPolicy {
/**
* Suppress errors: log the error and continue dispatching to remaining
* listeners.
* * When a handler throws an exception, the error is logged at * {@link java.util.logging.Level#WARNING} and remaining handlers still execute. * The configured {@link EventErrorHandler} is called for each error. This is * analogous to Spring's {@code LOG_AND_SUPPRESS_ERROR_HANDLER} behavior. */ SUPPRESS_AND_LOG_ERRORS, /** * Propagate errors: log the error and stop dispatch on first listener error * (default). *
* When a handler throws an exception, the error is logged at * {@link java.util.logging.Level#WARNING} and no further handlers are invoked. * The configured {@link EventErrorHandler} is still called before dispatch * stops. This is analogous to Spring's {@code LOG_AND_PROPAGATE_ERROR_HANDLER} * behavior. */ PROPAGATE_AND_LOG_ERRORS }