Не уверен, какова бизнес-цель потерять payload
в трассировке стека, но вы можете добиться этого, выбрасывая MessageTransformationException
вместо RuntimeException
.
Чтобы избежать сообщения в стекетрассировать с упомянутой полезной нагрузкой, вам нужно использовать один из этих конструкторов:
public MessageTransformationException(String description, Throwable cause) {
super(description, cause);
}
public MessageTransformationException(String description) {
super(description);
}
Вместо основанных на Message<?>
.
Таким образом, обтекание MessageTransformingHandler
сделаетсоответствующая логика:
protected Object handleRequestMessage(Message<?> message) {
try {
return this.transformer.transform(message);
}
catch (Exception e) {
if (e instanceof MessageTransformationException) {
throw (MessageTransformationException) e;
}
throw new MessageTransformationException(message, "Failed to transform Message", e);
}
}
ОБНОВЛЕНИЕ
Оказалось, что MessageTransformationException
недостаточно, поскольку AbstractMessageHandler
проверяет MessageHandlingException
для переноса вIntegrationUtils.wrapInHandlingExceptionIfNecessary()
.Поэтому я предлагаю вместо этого выкинуть MessageHandlingException
из вашего кода.И используйте этот конструктор с null
для сообщения arg:
MessageHandlingException(Message<?> failedMessage, Throwable cause)