GH-1234 Change the point where 'failConversionIfNecessary' is called
I have also added a new method to MessageConverterHelper.shouldFailIfCantConvert(Message<?> message, Throwable t) to include Throwable and changed the callback in SmartCompositeMessageConverter to ensure it passes it in case it needs to be taken into account. Resolves #1234
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2015-2021 the original author or authors.
|
* Copyright 2015-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -34,6 +34,19 @@ public interface MessageConverterHelper {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method will be called by the framework in cases when a message failed to convert.
|
||||||
|
* It allows you to signal to the framework if such failure should be considered fatal or not.
|
||||||
|
*
|
||||||
|
* @param message failed message
|
||||||
|
* @param t exception (coudl be null)
|
||||||
|
* @return true if conversion failure must be considered fatal.
|
||||||
|
*/
|
||||||
|
default boolean shouldFailIfCantConvert(Message<?> message, Throwable t) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method will be called by the framework in cases when a single message within batch of messages failed to convert.
|
* This method will be called by the framework in cases when a single message within batch of messages failed to convert.
|
||||||
* It provides a place for providing post-processing logic before message converter returns.
|
* It provides a place for providing post-processing logic before message converter returns.
|
||||||
|
|||||||
@@ -81,9 +81,10 @@ public class SmartCompositeMessageConverter extends CompositeMessageConverter {
|
|||||||
if (logger.isWarnEnabled()) {
|
if (logger.isWarnEnabled()) {
|
||||||
logger.warn("Failure during type conversion by " + converter + ". Will try the next converter.", e);
|
logger.warn("Failure during type conversion by " + converter + ". Will try the next converter.", e);
|
||||||
}
|
}
|
||||||
|
this.failConversionIfNecessary(message, messageConverterHelpers, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.failConversionIfNecessary(message, messageConverterHelpers);
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,7 +123,7 @@ public class SmartCompositeMessageConverter extends CompositeMessageConverter {
|
|||||||
}
|
}
|
||||||
if (!isConverted) {
|
if (!isConverted) {
|
||||||
this.postProcessBatchMessage(message, messageConverterHelpers, resultList.size());
|
this.postProcessBatchMessage(message, messageConverterHelpers, resultList.size());
|
||||||
this.failConversionIfNecessary(message, messageConverterHelpers);
|
this.failConversionIfNecessary(message, messageConverterHelpers, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return resultList;
|
return resultList;
|
||||||
@@ -139,13 +140,13 @@ public class SmartCompositeMessageConverter extends CompositeMessageConverter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.failConversionIfNecessary(message, messageConverterHelpers);
|
this.failConversionIfNecessary(message, messageConverterHelpers, null);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void failConversionIfNecessary(Message<?> message, Collection<MessageConverterHelper> messageConverterHelpers) {
|
private void failConversionIfNecessary(Message<?> message, Collection<MessageConverterHelper> messageConverterHelpers, Throwable t) {
|
||||||
for (MessageConverterHelper messageConverterHelper : messageConverterHelpers) {
|
for (MessageConverterHelper messageConverterHelper : messageConverterHelpers) {
|
||||||
if (messageConverterHelper.shouldFailIfCantConvert(message)) {
|
if (messageConverterHelper.shouldFailIfCantConvert(message, t)) {
|
||||||
throw new MessageConversionException("Failed to convert Message: " + message
|
throw new MessageConversionException("Failed to convert Message: " + message
|
||||||
+ ". None of the available Message converters were able to convert this Message");
|
+ ". None of the available Message converters were able to convert this Message");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user