Skip to content

Commit 7ddbbe5

Browse files
committed
Fix HTTP header propagation logic
Related to GH-422 and GH-606
1 parent 311649c commit 7ddbbe5

File tree

3 files changed

+28
-2
lines changed

3 files changed

+28
-2
lines changed

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

+9
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,15 @@ public Function<Message<SpringReleaseEvent>, SpringReleaseEvent> consumeAndProdu
113113
};
114114
}
115115

116+
@Bean
117+
public Function<Map<String, Object>, Map<String, Object>> consumeAndProduceCloudEventAsPojoToPojo() {
118+
return ceMessage -> {
119+
ceMessage.put("version", "10.0");
120+
ceMessage.put("releaseDate", "01-10-2050");
121+
return ceMessage;
122+
};
123+
}
124+
116125
@Bean
117126
public CloudEventAttributesProvider cloudEventAttributesProvider() {
118127
return new CustomCloudEventAtttributesProvider();

spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/RequestProcessor.java

+18-1
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,24 @@ private Mono<ResponseEntity<?>> response(FunctionWrapper request, Object handler
191191
.map(message -> message.getPayload());
192192
}
193193
else {
194-
builder.headers(HeaderUtils.sanitize(request.headers()));
194+
if (result instanceof Mono) {
195+
result = Mono.from(result)
196+
.map(message -> MessageUtils.unpack(handler, message))
197+
.doOnNext(value -> {
198+
builder.headers(HeaderUtils.sanitize(request.headers()));
199+
addHeaders(builder, value);
200+
})
201+
.map(message -> message.getPayload());
202+
}
203+
else {
204+
result = Flux.from(result)
205+
.map(message -> MessageUtils.unpack(handler, message))
206+
.doOnNext(value -> {
207+
builder.headers(HeaderUtils.sanitize(request.headers()));
208+
addHeaders(builder, value);
209+
})
210+
.map(message -> message.getPayload());
211+
}
195212
}
196213

197214
if (isOutputSingle(handler)

spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/util/FunctionWebUtils.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ else if (result instanceof Mono) {
115115
}
116116
else if (result instanceof Message) {
117117
if (!isMessage) {
118-
result = ((Message) result).getPayload();
118+
// result = ((Message) result).getPayload();
119119
}
120120
else if (((Message) result).getPayload() instanceof byte[]) {
121121
String str = new String((byte[]) ((Message) result).getPayload());

0 commit comments

Comments
 (0)