Class ApplicationFailure

All Implemented Interfaces:
Serializable

public final class ApplicationFailure extends TemporalFailure
Application failure is used to communicate application specific failures between workflows and activities.

Throw this exception to have full control over type and details if the exception delivered to the caller workflow or client.

Any unhandled exception which doesn't extend TemporalFailure is converted to an instance of this class before being returned to a caller.

The type property is used by RetryOptions to determine if an instance of this exception is non retryable. Another way to avoid retrying an exception of this type is by setting nonRetryable flag to @{code true}.

The conversion of an exception that doesn't extend TemporalFailure to an ApplicationFailure is done as following:

  • type is set to the exception full type name.
  • message is set to the exception message
  • nonRetryable is set to false
  • details are set to null
  • stack trace is copied from the original exception
  • category is set to ApplicationErrorCategory.UNSPECIFIED
See Also:
  • Method Details

    • newBuilder

      public static ApplicationFailure.Builder newBuilder()
      Creates a new builder for ApplicationFailure.
    • newBuilder

      public static ApplicationFailure.Builder newBuilder(ApplicationFailure options)
      Creates a new builder for ApplicationFailure initialized with the provided failure.
    • newFailure

      public static ApplicationFailure newFailure(String message, String type, Object... details)
      New ApplicationFailure with isNonRetryable() flag set to false.

      Note that this exception still may not be retried by the service if its type is included in the doNotRetry property of the correspondent retry policy.

      Parameters:
      message - optional error message
      type - optional error type that is used by RetryOptions.Builder.setDoNotRetry(String...).
      details - optional details about the failure. They are serialized using the same approach as arguments and results.
    • newFailureWithCause

      public static ApplicationFailure newFailureWithCause(String message, String type, @Nullable Throwable cause, Object... details)
      New ApplicationFailure with isNonRetryable() flag set to false.

      Note that this exception still may not be retried by the service if its type is included in the doNotRetry property of the correspondent retry policy.

      Parameters:
      message - optional error message
      type - optional error type that is used by RetryOptions.Builder.setDoNotRetry(String...).
      cause - failure cause. Each element of the cause chain will be converted to ApplicationFailure for network transmission across network if it doesn't extend TemporalFailure
      details - optional details about the failure. They are serialized using the same approach as arguments and results.
    • newFailureWithCauseAndDelay

      public static ApplicationFailure newFailureWithCauseAndDelay(String message, String type, @Nullable Throwable cause, Duration nextRetryDelay, Object... details)
      New ApplicationFailure with isNonRetryable() flag set to false.

      Note that this exception still may not be retried by the service if its type is included in the doNotRetry property of the correspondent retry policy.

      Parameters:
      message - optional error message
      type - optional error type that is used by RetryOptions.Builder.setDoNotRetry(String...).
      cause - failure cause. Each element of the cause chain will be converted to ApplicationFailure for network transmission across network if it doesn't extend TemporalFailure
      nextRetryDelay - delay before the next retry attempt.
      details - optional details about the failure. They are serialized using the same approach as arguments and results.
    • newNonRetryableFailure

      public static ApplicationFailure newNonRetryableFailure(String message, String type, Object... details)
      New ApplicationFailure with isNonRetryable() flag set to true.

      It means that this exception is not going to be retried even if it is not included into retry policy doNotRetry list.

      Parameters:
      message - optional error message
      type - error type
      details - optional details about the failure. They are serialized using the same approach as arguments and results.
    • newNonRetryableFailureWithCause

      public static ApplicationFailure newNonRetryableFailureWithCause(String message, String type, @Nullable Throwable cause, Object... details)
      New ApplicationFailure with isNonRetryable() flag set to true.

      This exception will not be retried even if it is absent from the retry policy doNotRetry list.

      Parameters:
      message - optional error message
      type - error type
      cause - failure cause. Each element of the cause chain will be converted to ApplicationFailure for network transmission across network if it doesn't extend TemporalFailure
      details - optional details about the failure. They are serialized using the same approach as arguments and results.
    • getType

      public String getType()
    • getDetails

      public Values getDetails()
    • getNextRetryDelay

      @Nullable public Duration getNextRetryDelay()
    • setNonRetryable

      public void setNonRetryable(boolean nonRetryable)
    • isNonRetryable

      public boolean isNonRetryable()
    • setDataConverter

      public void setDataConverter(DataConverter converter)
      Overrides:
      setDataConverter in class TemporalFailure
    • setNextRetryDelay

      public void setNextRetryDelay(Duration nextRetryDelay)
    • getCategory

      public ApplicationErrorCategory getCategory()