From 6093aefe141f7fbfb494fc10cf2c533f3ead80a6 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Mon, 16 Nov 2020 14:20:02 +0100 Subject: [PATCH] GH-422, GH-606 Fix attributes generatioin --- .../function/cloudevent/CloudEventMessageUtils.java | 4 ++-- .../catalog/BeanFactoryAwareFunctionRegistry.java | 9 ++++----- .../cloudevent/CloudeventDemoApplication.java | 13 ++++++++++++- .../CloudeventDemoApplicationRESTTests.java | 12 ++++++------ 4 files changed, 24 insertions(+), 14 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 851d147d2..17060eecb 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 @@ -286,7 +286,7 @@ public final class CloudEventMessageUtils { } } - public static Map generateDefaultCloudEventHeaders(Message inputMessage, Object result, String applicationName) { + public static CloudEventAttributes generateAttributes(Message inputMessage, Object result, String applicationName) { CloudEventAttributes attributes = new CloudEventAttributes(inputMessage.getHeaders(), CloudEventMessageUtils.determinePrefixToUse(inputMessage)); if (attributes.isValidCloudEvent()) { return attributes @@ -295,6 +295,6 @@ public final class CloudEventMessageUtils { .setType(result.getClass().getName()) .setSource(applicationName); } - return Collections.emptyMap(); + return new CloudEventAttributes(Collections.emptyMap()); } } diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java index e77e5634c..4aa9968ef 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java @@ -19,7 +19,6 @@ package org.springframework.cloud.function.context.catalog; import java.lang.reflect.Method; import java.lang.reflect.Type; import java.util.Arrays; -import java.util.Map; import java.util.Set; import java.util.function.BiFunction; import java.util.function.Consumer; @@ -168,14 +167,14 @@ public class BeanFactoryAwareFunctionRegistry extends SimpleFunctionRegistry imp @Override public Message apply(Message inputMessage, Object invocationResult) { // TODO: Factor it out! Cloud Events specific code - Map generatedCeHeaders = CloudEventMessageUtils - .generateDefaultCloudEventHeaders(inputMessage, invocationResult, getApplicationName()); - CloudEventAttributes attributes = new CloudEventAttributes(generatedCeHeaders); + CloudEventAttributes generatedCeHeaders = CloudEventMessageUtils + .generateAttributes(inputMessage, invocationResult, getApplicationName()); + CloudEventAttributes attributes = new CloudEventAttributes(generatedCeHeaders, CloudEventMessageUtils.determinePrefixToUse(inputMessage)); if (cloudEventAtttributesProvider != null) { cloudEventAtttributesProvider.generateDefaultCloudEventHeaders(attributes); } Message message = MessageBuilder.withPayload(invocationResult) - .copyHeaders(generatedCeHeaders) + .copyHeaders(attributes) .build(); return message; 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 3a781c298..88f1a6e0d 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 @@ -17,6 +17,7 @@ package io.spring.cloudevent; import java.util.Map; +import java.util.function.Consumer; import java.util.function.Function; import org.springframework.boot.SpringApplication; @@ -96,7 +97,9 @@ public class CloudeventDemoApplication { @Bean public CloudEventAttributesProvider cloudEventAttributesProvider() { - return attributes -> attributes.setSource("https://interface21.com/").setType("com.interface21"); + return attributes -> { + attributes.setSource("https://interface21.com/").setType("com.interface21"); + }; } @@ -116,4 +119,12 @@ public class CloudeventDemoApplication { return event; }; } + +// @Bean +// public Consumer pojoConsumer(CloudEventAttributesProvider provider) { +// return event -> { +// +// provider.generateDefaultCloudEventHeaders(attributes); +// }; +// } } diff --git a/spring-cloud-function-samples/function-sample-cloudevent/src/test/java/io/spring/cloudevent/CloudeventDemoApplicationRESTTests.java b/spring-cloud-function-samples/function-sample-cloudevent/src/test/java/io/spring/cloudevent/CloudeventDemoApplicationRESTTests.java index 27adb8d70..3aaf49671 100644 --- a/spring-cloud-function-samples/function-sample-cloudevent/src/test/java/io/spring/cloudevent/CloudeventDemoApplicationRESTTests.java +++ b/spring-cloud-function-samples/function-sample-cloudevent/src/test/java/io/spring/cloudevent/CloudeventDemoApplicationRESTTests.java @@ -215,9 +215,9 @@ public class CloudeventDemoApplicationRESTTests { assertThat(response.getBody()).isEqualTo("{\"releaseDate\":\"01-10-2050\",\"releaseName\":\"Spring Framework\",\"version\":\"10.0\"}"); assertThat(response.getHeaders().get(CloudEventMessageUtils.HTTP_ATTR_PREFIX + CloudEventMessageUtils.SOURCE)) - .isEqualTo(Collections.singletonList("http://spring.io/application-application")); + .isEqualTo(Collections.singletonList("https://interface21.com/")); assertThat(response.getHeaders().get(CloudEventMessageUtils.HTTP_ATTR_PREFIX + CloudEventMessageUtils.TYPE)) - .isEqualTo(Collections.singletonList(LinkedHashMap.class.getName())); + .isEqualTo(Collections.singletonList("com.interface21")); } @Test @@ -232,9 +232,9 @@ public class CloudeventDemoApplicationRESTTests { assertThat(response.getBody()).isEqualTo("{\"releaseDate\":\"01-10-2006\",\"releaseName\":\"Spring Framework\",\"version\":\"2.0\"}"); assertThat(response.getHeaders().get(CloudEventMessageUtils.HTTP_ATTR_PREFIX + CloudEventMessageUtils.SOURCE)) - .isEqualTo(Collections.singletonList("http://spring.io/application-application")); + .isEqualTo(Collections.singletonList("https://interface21.com/")); assertThat(response.getHeaders().get(CloudEventMessageUtils.HTTP_ATTR_PREFIX + CloudEventMessageUtils.TYPE)) - .isEqualTo(Collections.singletonList(SpringReleaseEvent.class.getName())); + .isEqualTo(Collections.singletonList("com.interface21")); } @@ -259,9 +259,9 @@ public class CloudeventDemoApplicationRESTTests { assertThat(response.getBody()).isEqualTo("{\"releaseDate\":\"01-10-2006\",\"releaseName\":\"Spring Framework\",\"version\":\"2.0\"}"); assertThat(response.getHeaders().get(CloudEventMessageUtils.HTTP_ATTR_PREFIX + CloudEventMessageUtils.SOURCE)) - .isEqualTo(Collections.singletonList("http://spring.io/application-application")); + .isEqualTo(Collections.singletonList("https://interface21.com/")); assertThat(response.getHeaders().get(CloudEventMessageUtils.HTTP_ATTR_PREFIX + CloudEventMessageUtils.TYPE)) - .isEqualTo(Collections.singletonList(SpringReleaseEvent.class.getName())); + .isEqualTo(Collections.singletonList("com.interface21")); assertThat(response.getHeaders().get(CloudEventMessageUtils.ATTR_PREFIX + CloudEventMessageUtils.TYPE)).isNull(); assertThat(response.getHeaders().get(CloudEventMessageUtils.ATTR_PREFIX + CloudEventMessageUtils.SOURCE)).isNull(); assertThat(response.getHeaders().get(CloudEventMessageUtils.ATTR_PREFIX + CloudEventMessageUtils.ID)).isNull();