Skip to content

Commit b02fe24

Browse files
committed
GH-830 Fix conversioin exception for custom converters
Resolves #830
1 parent bb329cf commit b02fe24

File tree

3 files changed

+8
-5
lines changed

3 files changed

+8
-5
lines changed

spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/JsonMessageConverter.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
import java.lang.reflect.Type;
2020
import java.nio.charset.StandardCharsets;
21-
import java.util.Collection;
2221

2322
import org.springframework.cloud.function.cloudevent.CloudEventMessageUtils;
2423
import org.springframework.cloud.function.json.JsonMapper;
@@ -76,9 +75,6 @@ protected boolean canConvertFrom(Message<?> message, @Nullable Class<?> targetCl
7675

7776
@Override
7877
protected Object convertFromInternal(Message<?> message, Class<?> targetClass, @Nullable Object conversionHint) {
79-
if (targetClass.isInstance(message.getPayload()) && !(message.getPayload() instanceof Collection<?>)) {
80-
return message.getPayload();
81-
}
8278
Type convertToType = conversionHint == null ? targetClass : (Type) conversionHint;
8379
if (targetClass == byte[].class && message.getPayload() instanceof String) {
8480
return ((String) message.getPayload()).getBytes(StandardCharsets.UTF_8);

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ public SmartCompositeMessageConverter(Collection<MessageConverter> converters) {
4545
@Nullable
4646
public Object fromMessage(Message<?> message, Class<?> targetClass) {
4747
for (MessageConverter converter : getConverters()) {
48+
if (targetClass.isInstance(message.getPayload()) && !(message.getPayload() instanceof Collection<?>)) {
49+
return message.getPayload();
50+
}
4851
Object result = converter.fromMessage(message, targetClass);
4952
if (result != null) {
5053
return result;
@@ -57,6 +60,9 @@ public Object fromMessage(Message<?> message, Class<?> targetClass) {
5760
@Nullable
5861
public Object fromMessage(Message<?> message, Class<?> targetClass, @Nullable Object conversionHint) {
5962
for (MessageConverter converter : getConverters()) {
63+
if (targetClass.isInstance(message.getPayload()) && !(message.getPayload() instanceof Collection<?>)) {
64+
return message.getPayload();
65+
}
6066
Object result = (converter instanceof SmartMessageConverter ?
6167
((SmartMessageConverter) converter).fromMessage(message, targetClass, conversionHint) :
6268
converter.fromMessage(message, targetClass));

spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistryTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import org.springframework.cloud.function.context.HybridFunctionalRegistrationTests.UppercaseFunction;
4949
import org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry.FunctionInvocationWrapper;
5050
import org.springframework.cloud.function.context.config.JsonMessageConverter;
51+
import org.springframework.cloud.function.context.config.SmartCompositeMessageConverter;
5152
import org.springframework.cloud.function.json.GsonMapper;
5253
import org.springframework.cloud.function.json.JacksonMapper;
5354
import org.springframework.cloud.function.json.JsonMapper;
@@ -86,7 +87,7 @@ public void before() {
8687
messageConverters.add(new JsonMessageConverter(jsonMapper));
8788
messageConverters.add(new ByteArrayMessageConverter());
8889
messageConverters.add(new StringMessageConverter());
89-
this.messageConverter = new CompositeMessageConverter(messageConverters);
90+
this.messageConverter = new SmartCompositeMessageConverter(messageConverters);
9091

9192
this.conversionService = new DefaultConversionService();
9293
}

0 commit comments

Comments
 (0)