From dc34f3eb6b1d5262a9c525078ef00c5ff688fa61 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Mon, 29 Nov 2021 17:10:49 +0100 Subject: [PATCH] GH-773 Fix wild card type matching in SmartCompositeMessageConverter Resolves #773 --- .../config/SmartCompositeMessageConverter.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/SmartCompositeMessageConverter.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/SmartCompositeMessageConverter.java index b243049d6..fedbe5e98 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/SmartCompositeMessageConverter.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/SmartCompositeMessageConverter.java @@ -74,18 +74,21 @@ public class SmartCompositeMessageConverter extends CompositeMessageConverter { if (headers.get(MessageHeaders.CONTENT_TYPE) == null) { return null; } + Object value = headers.get(MessageHeaders.CONTENT_TYPE).toString(); String[] contentTypes = StringUtils.delimitedListToStringArray((String) value, ","); for (String contentType : contentTypes) { if (!MimeType.valueOf(contentType).isConcrete()) { List supportedMimeTypes = ((AbstractMessageConverter) converter).getSupportedMimeTypes(); for (MimeType supportedMimeType : supportedMimeTypes) { - MessageHeaderAccessor h = new MessageHeaderAccessor(); - h.copyHeaders(headers); - h.setHeader(MessageHeaders.CONTENT_TYPE, supportedMimeType); - Message result = converter.toMessage(payload, h.getMessageHeaders()); - if (result != null) { - return result; + if (supportedMimeType.isCompatibleWith(MimeType.valueOf(contentType))) { + MessageHeaderAccessor h = new MessageHeaderAccessor(); + h.copyHeaders(headers); + h.setHeader(MessageHeaders.CONTENT_TYPE, supportedMimeType); + Message result = converter.toMessage(payload, h.getMessageHeaders()); + if (result != null) { + return result; + } } } }