From 24ef2747ba9c78d42fd77614a8bb855df9f6c651 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Mon, 16 Nov 2020 16:49:59 +0100 Subject: [PATCH] GH-422, GH-606 Improve generation of default attributes for Consumer --- .../cloudevent/CloudEventMessageUtils.java | 20 +++++++++++++------ .../cloudevent/CloudeventDemoApplication.java | 10 +++++++--- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/cloudevent/CloudEventMessageUtils.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/cloudevent/CloudEventMessageUtils.java index e16cb5929..69c14c039 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/cloudevent/CloudEventMessageUtils.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/cloudevent/CloudEventMessageUtils.java @@ -16,7 +16,6 @@ package org.springframework.cloud.function.cloudevent; -import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -286,21 +285,30 @@ public final class CloudEventMessageUtils { } } - public static CloudEventAttributes generateAttributesWithProvider(MessageHeaders headers, CloudEventAttributesProvider provider) { - CloudEventAttributes attributes = new CloudEventAttributes(headers); + /** + * Typically called by Consumer. + + */ + public static CloudEventAttributes generateAttributes(Message message, CloudEventAttributesProvider provider) { + CloudEventAttributes attributes = generateDefaultAttributeValues(new CloudEventAttributes(message.getHeaders()), + message.getPayload().getClass().getName().getClass().getName(), message.getPayload().getClass().getName().getClass().getName()); provider.generateDefaultCloudEventHeaders(attributes); return attributes; } public static CloudEventAttributes generateAttributes(Message inputMessage, Object result, String applicationName) { CloudEventAttributes attributes = new CloudEventAttributes(inputMessage.getHeaders(), CloudEventMessageUtils.determinePrefixToUse(inputMessage)); + return generateDefaultAttributeValues(attributes, result.getClass().getName(), applicationName); + } + + private static CloudEventAttributes generateDefaultAttributeValues(CloudEventAttributes attributes, String source, String type) { if (attributes.isValidCloudEvent()) { return attributes .setSpecversion("1.0") .setId(UUID.randomUUID().toString()) - .setType(result.getClass().getName()) - .setSource(applicationName); + .setType(type) + .setSource(source); } - return new CloudEventAttributes(Collections.emptyMap()); + return attributes; } } diff --git a/spring-cloud-function-samples/function-sample-cloudevent/src/main/java/io/spring/cloudevent/CloudeventDemoApplication.java b/spring-cloud-function-samples/function-sample-cloudevent/src/main/java/io/spring/cloudevent/CloudeventDemoApplication.java index f05205598..d2efb41dc 100644 --- a/spring-cloud-function-samples/function-sample-cloudevent/src/main/java/io/spring/cloudevent/CloudeventDemoApplication.java +++ b/spring-cloud-function-samples/function-sample-cloudevent/src/main/java/io/spring/cloudevent/CloudeventDemoApplication.java @@ -135,12 +135,16 @@ public class CloudeventDemoApplication { return eventMessage -> { RequestEntity entity = RequestEntity.post(URI.create("http://foo.com")) .headers(HeaderUtils.fromMessage( - new MessageHeaders(CloudEventMessageUtils.generateAttributesWithProvider(eventMessage.getHeaders(), provider)))) + new MessageHeaders(CloudEventMessageUtils.generateAttributes(eventMessage, provider)))) .body(eventMessage.getPayload()); List sourceHeader = entity.getHeaders().get("ce-source"); - List typeHeader = entity.getHeaders().get("ce-type"); Assert.isTrue(sourceHeader.get(0).equals("https://interface21.com/"), "'source' must be https://interface21.com/"); + List typeHeader = entity.getHeaders().get("ce-type"); Assert.isTrue(typeHeader.get(0).equals("com.interface21"), "'source' must be com.interface21"); + List idHeader = entity.getHeaders().get("ce-id"); + Assert.notEmpty(idHeader, "'id' must not be null"); + List specversionHeader = entity.getHeaders().get("ce-specversion"); + Assert.notEmpty(specversionHeader, "'specversion' must not be null"); }; } @@ -153,7 +157,7 @@ public class CloudeventDemoApplication { return eventMessage -> { RequestEntity> entity = RequestEntity.post(URI.create("http://foo.com")) .headers(HeaderUtils.fromMessage( - new MessageHeaders(CloudEventMessageUtils.generateAttributesWithProvider(eventMessage.getHeaders(), provider)))) + new MessageHeaders(CloudEventMessageUtils.generateAttributes(eventMessage, provider, "io.spring")))) .body(eventMessage.getPayload()); client.exchange(entity, byte[].class); };