Skip to content

Commit b30b2c8

Browse files
committed
GH1190 Add byte[] to string conversion to CloudEventMessageUtils
Resolves #1190
1 parent dbafb30 commit b30b2c8

File tree

1 file changed

+36
-6
lines changed

1 file changed

+36
-6
lines changed

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

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.cloud.function.cloudevent;
1818

1919
import java.net.URI;
20+
import java.nio.charset.StandardCharsets;
2021
import java.time.OffsetDateTime;
2122
import java.util.Collections;
2223
import java.util.HashMap;
@@ -170,7 +171,11 @@ private CloudEventMessageUtils() {
170171

171172
public static String getId(Message<?> message) {
172173
String prefix = determinePrefixToUse(message.getHeaders());
173-
return (String) message.getHeaders().get(prefix + MessageHeaders.ID);
174+
Object value = message.getHeaders().get(prefix + MessageHeaders.ID);
175+
if (value instanceof byte[] v) {
176+
value = toString(v);
177+
}
178+
return (String) value;
174179
}
175180

176181
public static URI getSource(Message<?> message) {
@@ -180,17 +185,29 @@ public static URI getSource(Message<?> message) {
180185

181186
public static String getSpecVersion(Message<?> message) {
182187
String prefix = determinePrefixToUse(message.getHeaders());
183-
return (String) message.getHeaders().get(prefix + _SPECVERSION);
188+
Object value = message.getHeaders().get(prefix + _SPECVERSION);
189+
if (value instanceof byte[] v) {
190+
value = toString(v);
191+
}
192+
return (String) value;
184193
}
185194

186195
public static String getType(Message<?> message) {
187196
String prefix = determinePrefixToUse(message.getHeaders());
188-
return (String) message.getHeaders().get(prefix + _TYPE);
197+
Object value = message.getHeaders().get(prefix + _TYPE);
198+
if (value instanceof byte[] v) {
199+
value = toString(v);
200+
}
201+
return (String) value;
189202
}
190203

191204
public static String getDataContentType(Message<?> message) {
192205
String prefix = determinePrefixToUse(message.getHeaders());
193-
return (String) message.getHeaders().get(prefix + _DATACONTENTTYPE);
206+
Object value = message.getHeaders().get(prefix + _DATACONTENTTYPE);
207+
if (value instanceof byte[] v) {
208+
value = toString(v);
209+
}
210+
return (String) value;
194211
}
195212

196213
public static URI getDataSchema(Message<?> message) {
@@ -200,7 +217,11 @@ public static URI getDataSchema(Message<?> message) {
200217

201218
public static String getSubject(Message<?> message) {
202219
String prefix = determinePrefixToUse(message.getHeaders());
203-
return (String) message.getHeaders().get(prefix + _SUBJECT);
220+
Object value = message.getHeaders().get(prefix + _SUBJECT);
221+
if (value instanceof byte[] v) {
222+
value = toString(v);
223+
}
224+
return (String) value;
204225
}
205226

206227
public static OffsetDateTime getTime(Message<?> message) {
@@ -435,11 +456,20 @@ private static Message<?> buildBinaryMessageFromStructuredMap(Map<String, Object
435456
private static URI safeGetURI(Map<String, Object> map, String key) {
436457
Object uri = map.get(key);
437458
if (uri != null && uri instanceof String) {
438-
uri = URI.create((String) uri);
459+
if (uri instanceof String) {
460+
uri = URI.create((String) uri);
461+
}
462+
else if (uri instanceof byte[] u) {
463+
uri = URI.create(toString(u));
464+
}
439465
}
440466
return (URI) uri;
441467
}
442468

469+
private static String toString(byte[] value) {
470+
return new String(value, StandardCharsets.UTF_8);
471+
}
472+
443473
public static class Protocols {
444474
static String AMQP = "amqp";
445475
static String AVRO = "avro";

0 commit comments

Comments
 (0)