From 65b17b820ceba662e62bd8da50c7f0a7d1a443bd Mon Sep 17 00:00:00 2001 From: nagarro-nikhiljagtiani Date: Thu, 26 Jan 2023 01:21:20 +0530 Subject: [PATCH] Avoiding classCast exception Resolves #991 When messageconverters list has CloudEventMessageConverter before AvroSchemaRegisteryClientMessageConverter, and message has header contentType = application/*+avro It results in ClassCastException hence fixing the same. --- .../SmartCompositeMessageConverter.java | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 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 0c32f8c9d..12c3bdf0a 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 @@ -136,15 +136,17 @@ public class SmartCompositeMessageConverter extends CompositeMessageConverter { String[] contentTypes = StringUtils.delimitedListToStringArray((String) value, ","); for (String contentType : contentTypes) { if (!MimeType.valueOf(contentType).isConcrete()) { - List supportedMimeTypes = ((AbstractMessageConverter) converter).getSupportedMimeTypes(); - for (MimeType supportedMimeType : supportedMimeTypes) { - 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; + if (converter instanceof AbstractMessageConverter) { + List supportedMimeTypes = ((AbstractMessageConverter) converter).getSupportedMimeTypes(); + for (MimeType supportedMimeType : supportedMimeTypes) { + 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; + } } } }