Skip to content

Commit 017db7d

Browse files
committed
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
1 parent 547327e commit 017db7d

File tree

2 files changed

+20
-6
lines changed

2 files changed

+20
-6
lines changed

Diff for: spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/MessageConverterHelper.java

+14-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2015-2021 the original author or authors.
2+
* Copyright 2015-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -34,6 +34,19 @@ default boolean shouldFailIfCantConvert(Message<?> message) {
3434
return false;
3535
}
3636

37+
38+
/**
39+
* This method will be called by the framework in cases when a message failed to convert.
40+
* It allows you to signal to the framework if such failure should be considered fatal or not.
41+
*
42+
* @param message failed message
43+
* @param t exception (coudl be null)
44+
* @return true if conversion failure must be considered fatal.
45+
*/
46+
default boolean shouldFailIfCantConvert(Message<?> message, Throwable t) {
47+
return false;
48+
}
49+
3750
/**
3851
* This method will be called by the framework in cases when a single message within batch of messages failed to convert.
3952
* It provides a place for providing post-processing logic before message converter returns.

Diff for: spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/SmartCompositeMessageConverter.java

+6-5
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,10 @@ public Object fromMessage(Message<?> message, Class<?> targetClass) {
8181
if (logger.isWarnEnabled()) {
8282
logger.warn("Failure during type conversion by " + converter + ". Will try the next converter.", e);
8383
}
84+
this.failConversionIfNecessary(message, messageConverterHelpers, e);
8485
}
8586
}
86-
this.failConversionIfNecessary(message, messageConverterHelpers);
87+
8788
return null;
8889
}
8990

@@ -122,7 +123,7 @@ public Object fromMessage(Message<?> message, Class<?> targetClass, @Nullable Ob
122123
}
123124
if (!isConverted) {
124125
this.postProcessBatchMessage(message, messageConverterHelpers, resultList.size());
125-
this.failConversionIfNecessary(message, messageConverterHelpers);
126+
this.failConversionIfNecessary(message, messageConverterHelpers, null);
126127
}
127128
}
128129
return resultList;
@@ -139,13 +140,13 @@ public Object fromMessage(Message<?> message, Class<?> targetClass, @Nullable Ob
139140
}
140141
}
141142
}
142-
this.failConversionIfNecessary(message, messageConverterHelpers);
143+
this.failConversionIfNecessary(message, messageConverterHelpers, null);
143144
return result;
144145
}
145146

146-
private void failConversionIfNecessary(Message<?> message, Collection<MessageConverterHelper> messageConverterHelpers) {
147+
private void failConversionIfNecessary(Message<?> message, Collection<MessageConverterHelper> messageConverterHelpers, Throwable t) {
147148
for (MessageConverterHelper messageConverterHelper : messageConverterHelpers) {
148-
if (messageConverterHelper.shouldFailIfCantConvert(message)) {
149+
if (messageConverterHelper.shouldFailIfCantConvert(message, t)) {
149150
throw new MessageConversionException("Failed to convert Message: " + message
150151
+ ". None of the available Message converters were able to convert this Message");
151152
}

0 commit comments

Comments
 (0)