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.
This commit is contained in:
nagarro-nikhiljagtiani
2023-01-26 01:21:20 +05:30
committed by Oleg Zhurakousky
parent 1a9590f9db
commit 65b17b820c

View File

@@ -136,15 +136,17 @@ public class SmartCompositeMessageConverter extends CompositeMessageConverter {
String[] contentTypes = StringUtils.delimitedListToStringArray((String) value, ","); String[] contentTypes = StringUtils.delimitedListToStringArray((String) value, ",");
for (String contentType : contentTypes) { for (String contentType : contentTypes) {
if (!MimeType.valueOf(contentType).isConcrete()) { if (!MimeType.valueOf(contentType).isConcrete()) {
List<MimeType> supportedMimeTypes = ((AbstractMessageConverter) converter).getSupportedMimeTypes(); if (converter instanceof AbstractMessageConverter) {
for (MimeType supportedMimeType : supportedMimeTypes) { List<MimeType> supportedMimeTypes = ((AbstractMessageConverter) converter).getSupportedMimeTypes();
if (supportedMimeType.isCompatibleWith(MimeType.valueOf(contentType))) { for (MimeType supportedMimeType : supportedMimeTypes) {
MessageHeaderAccessor h = new MessageHeaderAccessor(); if (supportedMimeType.isCompatibleWith(MimeType.valueOf(contentType))) {
h.copyHeaders(headers); MessageHeaderAccessor h = new MessageHeaderAccessor();
h.setHeader(MessageHeaders.CONTENT_TYPE, supportedMimeType); h.copyHeaders(headers);
Message<?> result = converter.toMessage(payload, h.getMessageHeaders()); h.setHeader(MessageHeaders.CONTENT_TYPE, supportedMimeType);
if (result != null) { Message<?> result = converter.toMessage(payload, h.getMessageHeaders());
return result; if (result != null) {
return result;
}
} }
} }
} }