diff --git a/spring-cloud-stream-schema/src/main/java/org/springframework/cloud/stream/schema/avro/AbstractAvroMessageConverter.java b/spring-cloud-stream-schema/src/main/java/org/springframework/cloud/stream/schema/avro/AbstractAvroMessageConverter.java index a1480b3c8..af544935e 100644 --- a/spring-cloud-stream-schema/src/main/java/org/springframework/cloud/stream/schema/avro/AbstractAvroMessageConverter.java +++ b/spring-cloud-stream-schema/src/main/java/org/springframework/cloud/stream/schema/avro/AbstractAvroMessageConverter.java @@ -37,6 +37,7 @@ import org.apache.avro.specific.SpecificDatumReader; import org.apache.avro.specific.SpecificDatumWriter; import org.apache.avro.specific.SpecificRecord; +import org.springframework.cloud.stream.binder.BinderHeaders; import org.springframework.core.io.Resource; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHeaders; @@ -48,6 +49,7 @@ import org.springframework.util.MimeType; * Base class for Apache Avro * {@link org.springframework.messaging.converter.MessageConverter} implementations. * @author Marius Bogoevici + * @author Vinicius Carvalho */ public abstract class AbstractAvroMessageConverter extends AbstractMessageConverter { @@ -68,6 +70,29 @@ public abstract class AbstractAvroMessageConverter extends AbstractMessageConver return super.canConvertFrom(message, targetClass) && (message.getPayload() instanceof byte[]); } + @Override + protected boolean supportsMimeType(MessageHeaders headers) { + + for (MimeType current : getSupportedMimeTypes()) { + if(mimeTypeMatches(current,headers.get(MessageHeaders.CONTENT_TYPE)) || mimeTypeMatches(current,headers.get(BinderHeaders.BINDER_ORIGINAL_CONTENT_TYPE)) ){ + return true; + } + } + + return false; + } + + private boolean mimeTypeMatches(MimeType reference, Object target){ + if(target == null){ + return !isStrictContentTypeMatch(); + }else if(target instanceof MimeType){ + return reference.equals((MimeType)target); + }else if(target instanceof String){ + return reference.equals(MimeType.valueOf((String)target)); + } + return false; + } + @Override protected Object convertFromInternal(Message message, Class targetClass, Object conversionHint) { Object result = null;