Skip to content

Commit 24ef274

Browse files
committed
GH-422, GH-606 Improve generation of default attributes for Consumer
1 parent ee3868d commit 24ef274

File tree

2 files changed

+21
-9
lines changed

2 files changed

+21
-9
lines changed

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

+14-6
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
package org.springframework.cloud.function.cloudevent;
1818

19-
import java.util.Collections;
2019
import java.util.HashMap;
2120
import java.util.Map;
2221
import java.util.Set;
@@ -286,21 +285,30 @@ public static String determinePrefixToUse(Message<?> inputMessage) {
286285
}
287286
}
288287

289-
public static CloudEventAttributes generateAttributesWithProvider(MessageHeaders headers, CloudEventAttributesProvider provider) {
290-
CloudEventAttributes attributes = new CloudEventAttributes(headers);
288+
/**
289+
* Typically called by Consumer.
290+
291+
*/
292+
public static CloudEventAttributes generateAttributes(Message<?> message, CloudEventAttributesProvider provider) {
293+
CloudEventAttributes attributes = generateDefaultAttributeValues(new CloudEventAttributes(message.getHeaders()),
294+
message.getPayload().getClass().getName().getClass().getName(), message.getPayload().getClass().getName().getClass().getName());
291295
provider.generateDefaultCloudEventHeaders(attributes);
292296
return attributes;
293297
}
294298

295299
public static CloudEventAttributes generateAttributes(Message<?> inputMessage, Object result, String applicationName) {
296300
CloudEventAttributes attributes = new CloudEventAttributes(inputMessage.getHeaders(), CloudEventMessageUtils.determinePrefixToUse(inputMessage));
301+
return generateDefaultAttributeValues(attributes, result.getClass().getName(), applicationName);
302+
}
303+
304+
private static CloudEventAttributes generateDefaultAttributeValues(CloudEventAttributes attributes, String source, String type) {
297305
if (attributes.isValidCloudEvent()) {
298306
return attributes
299307
.setSpecversion("1.0")
300308
.setId(UUID.randomUUID().toString())
301-
.setType(result.getClass().getName())
302-
.setSource(applicationName);
309+
.setType(type)
310+
.setSource(source);
303311
}
304-
return new CloudEventAttributes(Collections.emptyMap());
312+
return attributes;
305313
}
306314
}

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

+7-3
Original file line numberDiff line numberDiff line change
@@ -135,12 +135,16 @@ public Consumer<Message<SpringReleaseEvent>> pojoConsumer(CloudEventAttributesPr
135135
return eventMessage -> {
136136
RequestEntity<SpringReleaseEvent> entity = RequestEntity.post(URI.create("http://foo.com"))
137137
.headers(HeaderUtils.fromMessage(
138-
new MessageHeaders(CloudEventMessageUtils.generateAttributesWithProvider(eventMessage.getHeaders(), provider))))
138+
new MessageHeaders(CloudEventMessageUtils.generateAttributes(eventMessage, provider))))
139139
.body(eventMessage.getPayload());
140140
List<String> sourceHeader = entity.getHeaders().get("ce-source");
141-
List<String> typeHeader = entity.getHeaders().get("ce-type");
142141
Assert.isTrue(sourceHeader.get(0).equals("https://interface21.com/"), "'source' must be https://interface21.com/");
142+
List<String> typeHeader = entity.getHeaders().get("ce-type");
143143
Assert.isTrue(typeHeader.get(0).equals("com.interface21"), "'source' must be com.interface21");
144+
List<String> idHeader = entity.getHeaders().get("ce-id");
145+
Assert.notEmpty(idHeader, "'id' must not be null");
146+
List<String> specversionHeader = entity.getHeaders().get("ce-specversion");
147+
Assert.notEmpty(specversionHeader, "'specversion' must not be null");
144148
};
145149
}
146150

@@ -153,7 +157,7 @@ public Consumer<Message<Map<String, Object>>> sink(CloudEventAttributesProvider
153157
return eventMessage -> {
154158
RequestEntity<Map<String, Object>> entity = RequestEntity.post(URI.create("http://foo.com"))
155159
.headers(HeaderUtils.fromMessage(
156-
new MessageHeaders(CloudEventMessageUtils.generateAttributesWithProvider(eventMessage.getHeaders(), provider))))
160+
new MessageHeaders(CloudEventMessageUtils.generateAttributes(eventMessage, provider, "io.spring"))))
157161
.body(eventMessage.getPayload());
158162
client.exchange(entity, byte[].class);
159163
};

0 commit comments

Comments
 (0)