GH-924 Fix regression with structured CE cnversion into Message

Resolves #924
This commit is contained in:
Oleg Zhurakousky
2022-09-08 16:20:43 +02:00
parent c8109270d2
commit 0abfeee528
2 changed files with 6 additions and 5 deletions

View File

@@ -231,15 +231,16 @@ public final class CloudEventMessageUtils {
inputMessage = canonicalizeHeadersWithPossibleCopy(inputMessage);
Map<String, Object> headers = new HashMap<>(inputMessage.getHeaders());
if (isCloudEvent(inputMessage) && headers.containsKey("content-type")) {
boolean isCloudEvent = isCloudEvent(inputMessage);
if (isCloudEvent && headers.containsKey("content-type")) {
inputMessage = MessageBuilder.fromMessage(inputMessage).setHeader(MessageHeaders.CONTENT_TYPE, headers.get("content-type")).build();
}
MimeType contentType = contentTypeResolver.resolve(inputMessage.getHeaders());
String inputContentType = (String) inputMessage.getHeaders().get(DATACONTENTTYPE);
// first check the obvious and see if content-type is `cloudevents`
if (!isCloudEvent(inputMessage) && headers.containsKey(MessageHeaders.CONTENT_TYPE)) {
if (!isCloudEvent && contentType != null) {
// structured-mode
MimeType contentType = contentTypeResolver.resolve(inputMessage.getHeaders());
if (contentType.getType().equals(APPLICATION_CLOUDEVENTS.getType()) && contentType
.getSubtype().startsWith(APPLICATION_CLOUDEVENTS.getSubtype())) {
@@ -254,7 +255,6 @@ public final class CloudEventMessageUtils {
.setHeader(DATACONTENTTYPE, dataContentType).build();
Map<String, Object> structuredCloudEvent = (Map<String, Object>) messageConverter
.fromMessage(cloudEventMessage, Map.class);
canonicalizeHeaders(structuredCloudEvent, true);
return buildBinaryMessageFromStructuredMap(structuredCloudEvent,
inputMessage.getHeaders());

View File

@@ -391,6 +391,7 @@ public class CloudEventFunctionTests {
Function<Message<SpringReleaseEvent>, Message<SpringReleaseEvent>> springReleaseAsMessage() {
return message -> {
SpringReleaseEvent updated = springRelease().apply(message.getPayload());
assertThat(message.getHeaders().get("ce-type")).isEqualTo("org.springframework");
return CloudEventMessageBuilder.withData(updated)
.copyHeaders(message.getHeaders())
.setSource("https://spring.release.event")