public class ConditionalRejectingErrorHandler
extends java.lang.Object
implements org.springframework.util.ErrorHandler
ErrorHandler
that conditionally wraps the Exception in an
AmqpRejectAndDontRequeueException
if the configured rejection
strategy determines that the message is fatal and should not be requeued.
Such messages will be discarded or sent to a Dead Letter Exchange, depending
on broker configuration.
The default strategy will do this if the exception is a
ListenerExecutionFailedException
with a cause of MessageConversionException
,
MessageConversionException
,
MethodArgumentNotValidException
,
MethodArgumentTypeMismatchException
,
NoSuchMethodException
or ClassCastException
.
The exception will not be wrapped if the cause
chain already contains an
AmqpRejectAndDontRequeueException
.
Modifier and Type | Class and Description |
---|---|
static class |
ConditionalRejectingErrorHandler.DefaultExceptionStrategy
Default implementation of
FatalExceptionStrategy . |
Modifier and Type | Field and Description |
---|---|
protected org.apache.commons.logging.Log |
logger |
Constructor and Description |
---|
ConditionalRejectingErrorHandler()
Create a handler with the
ConditionalRejectingErrorHandler.DefaultExceptionStrategy . |
ConditionalRejectingErrorHandler(FatalExceptionStrategy exceptionStrategy)
Create a handler with the supplied
FatalExceptionStrategy implementation. |
Modifier and Type | Method and Description |
---|---|
protected boolean |
causeChainContainsARADRE(java.lang.Throwable t)
Return true if there is already an
AmqpRejectAndDontRequeueException
present in the cause chain. |
void |
handleError(java.lang.Throwable t) |
protected void |
log(java.lang.Throwable t)
Log the throwable at WARN level, including stack trace.
|
void |
setDiscardFatalsWithXDeath(boolean discardFatalsWithXDeath)
Set to false to disable the (now) default behavior of logging and discarding
messages that cause fatal exceptions and have an `x-death` header; which
usually means that the message has been republished after previously being
sent to a DLQ.
|
public ConditionalRejectingErrorHandler()
ConditionalRejectingErrorHandler.DefaultExceptionStrategy
.public ConditionalRejectingErrorHandler(FatalExceptionStrategy exceptionStrategy)
FatalExceptionStrategy
implementation.exceptionStrategy
- The strategy implementation.public void setDiscardFatalsWithXDeath(boolean discardFatalsWithXDeath)
discardFatalsWithXDeath
- false to disable.public void handleError(java.lang.Throwable t)
handleError
in interface org.springframework.util.ErrorHandler
protected void log(java.lang.Throwable t)
t
- the Throwable
.protected boolean causeChainContainsARADRE(java.lang.Throwable t)
AmqpRejectAndDontRequeueException
present in the cause chain.t
- a Throwable
.AmqpRejectAndDontRequeueException
.