Skip to content

Commit 6093aef

Browse files
committed
GH-422, GH-606 Fix attributes generatioin
1 parent ac54a83 commit 6093aef

File tree

4 files changed

+24
-14
lines changed

4 files changed

+24
-14
lines changed

spring-cloud-function-context/src/main/java/org/springframework/cloud/function/cloudevent/CloudEventMessageUtils.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ public static String determinePrefixToUse(Message<?> inputMessage) {
286286
}
287287
}
288288

289-
public static Map<String, Object> generateDefaultCloudEventHeaders(Message<?> inputMessage, Object result, String applicationName) {
289+
public static CloudEventAttributes generateAttributes(Message<?> inputMessage, Object result, String applicationName) {
290290
CloudEventAttributes attributes = new CloudEventAttributes(inputMessage.getHeaders(), CloudEventMessageUtils.determinePrefixToUse(inputMessage));
291291
if (attributes.isValidCloudEvent()) {
292292
return attributes
@@ -295,6 +295,6 @@ public static Map<String, Object> generateDefaultCloudEventHeaders(Message<?> in
295295
.setType(result.getClass().getName())
296296
.setSource(applicationName);
297297
}
298-
return Collections.emptyMap();
298+
return new CloudEventAttributes(Collections.emptyMap());
299299
}
300300
}

spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import java.lang.reflect.Method;
2020
import java.lang.reflect.Type;
2121
import java.util.Arrays;
22-
import java.util.Map;
2322
import java.util.Set;
2423
import java.util.function.BiFunction;
2524
import java.util.function.Consumer;
@@ -168,14 +167,14 @@ else if (this.isSpecialFunctionRegistration(functionNames, functionName)) {
168167
@Override
169168
public Message<?> apply(Message<?> inputMessage, Object invocationResult) {
170169
// TODO: Factor it out! Cloud Events specific code
171-
Map<String, Object> generatedCeHeaders = CloudEventMessageUtils
172-
.generateDefaultCloudEventHeaders(inputMessage, invocationResult, getApplicationName());
173-
CloudEventAttributes attributes = new CloudEventAttributes(generatedCeHeaders);
170+
CloudEventAttributes generatedCeHeaders = CloudEventMessageUtils
171+
.generateAttributes(inputMessage, invocationResult, getApplicationName());
172+
CloudEventAttributes attributes = new CloudEventAttributes(generatedCeHeaders, CloudEventMessageUtils.determinePrefixToUse(inputMessage));
174173
if (cloudEventAtttributesProvider != null) {
175174
cloudEventAtttributesProvider.generateDefaultCloudEventHeaders(attributes);
176175
}
177176
Message message = MessageBuilder.withPayload(invocationResult)
178-
.copyHeaders(generatedCeHeaders)
177+
.copyHeaders(attributes)
179178
.build();
180179

181180
return message;

spring-cloud-function-samples/function-sample-cloudevent/src/main/java/io/spring/cloudevent/CloudeventDemoApplication.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package io.spring.cloudevent;
1818

1919
import java.util.Map;
20+
import java.util.function.Consumer;
2021
import java.util.function.Function;
2122

2223
import org.springframework.boot.SpringApplication;
@@ -96,7 +97,9 @@ public Function<Message<SpringReleaseEvent>, Message<SpringReleaseEvent>> consum
9697

9798
@Bean
9899
public CloudEventAttributesProvider cloudEventAttributesProvider() {
99-
return attributes -> attributes.setSource("https://interface21.com/").setType("com.interface21");
100+
return attributes -> {
101+
attributes.setSource("https://interface21.com/").setType("com.interface21");
102+
};
100103
}
101104

102105

@@ -116,4 +119,12 @@ public Function<SpringReleaseEvent, SpringReleaseEvent> consumeAndProduceCloudEv
116119
return event;
117120
};
118121
}
122+
123+
// @Bean
124+
// public Consumer<SpringReleaseEvent> pojoConsumer(CloudEventAttributesProvider provider) {
125+
// return event -> {
126+
//
127+
// provider.generateDefaultCloudEventHeaders(attributes);
128+
// };
129+
// }
119130
}

spring-cloud-function-samples/function-sample-cloudevent/src/test/java/io/spring/cloudevent/CloudeventDemoApplicationRESTTests.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -215,9 +215,9 @@ public void testAsBinaryMapToMap() throws Exception {
215215

216216
assertThat(response.getBody()).isEqualTo("{\"releaseDate\":\"01-10-2050\",\"releaseName\":\"Spring Framework\",\"version\":\"10.0\"}");
217217
assertThat(response.getHeaders().get(CloudEventMessageUtils.HTTP_ATTR_PREFIX + CloudEventMessageUtils.SOURCE))
218-
.isEqualTo(Collections.singletonList("http://spring.io/application-application"));
218+
.isEqualTo(Collections.singletonList("https://interface21.com/"));
219219
assertThat(response.getHeaders().get(CloudEventMessageUtils.HTTP_ATTR_PREFIX + CloudEventMessageUtils.TYPE))
220-
.isEqualTo(Collections.singletonList(LinkedHashMap.class.getName()));
220+
.isEqualTo(Collections.singletonList("com.interface21"));
221221
}
222222

223223
@Test
@@ -232,9 +232,9 @@ public void testAsBinaryPojoToPojo() throws Exception {
232232

233233
assertThat(response.getBody()).isEqualTo("{\"releaseDate\":\"01-10-2006\",\"releaseName\":\"Spring Framework\",\"version\":\"2.0\"}");
234234
assertThat(response.getHeaders().get(CloudEventMessageUtils.HTTP_ATTR_PREFIX + CloudEventMessageUtils.SOURCE))
235-
.isEqualTo(Collections.singletonList("http://spring.io/application-application"));
235+
.isEqualTo(Collections.singletonList("https://interface21.com/"));
236236
assertThat(response.getHeaders().get(CloudEventMessageUtils.HTTP_ATTR_PREFIX + CloudEventMessageUtils.TYPE))
237-
.isEqualTo(Collections.singletonList(SpringReleaseEvent.class.getName()));
237+
.isEqualTo(Collections.singletonList("com.interface21"));
238238
}
239239

240240

@@ -259,9 +259,9 @@ public void testAsBinaryPojoToPojoWrongHeaders() throws Exception {
259259

260260
assertThat(response.getBody()).isEqualTo("{\"releaseDate\":\"01-10-2006\",\"releaseName\":\"Spring Framework\",\"version\":\"2.0\"}");
261261
assertThat(response.getHeaders().get(CloudEventMessageUtils.HTTP_ATTR_PREFIX + CloudEventMessageUtils.SOURCE))
262-
.isEqualTo(Collections.singletonList("http://spring.io/application-application"));
262+
.isEqualTo(Collections.singletonList("https://interface21.com/"));
263263
assertThat(response.getHeaders().get(CloudEventMessageUtils.HTTP_ATTR_PREFIX + CloudEventMessageUtils.TYPE))
264-
.isEqualTo(Collections.singletonList(SpringReleaseEvent.class.getName()));
264+
.isEqualTo(Collections.singletonList("com.interface21"));
265265
assertThat(response.getHeaders().get(CloudEventMessageUtils.ATTR_PREFIX + CloudEventMessageUtils.TYPE)).isNull();
266266
assertThat(response.getHeaders().get(CloudEventMessageUtils.ATTR_PREFIX + CloudEventMessageUtils.SOURCE)).isNull();
267267
assertThat(response.getHeaders().get(CloudEventMessageUtils.ATTR_PREFIX + CloudEventMessageUtils.ID)).isNull();

0 commit comments

Comments
 (0)