1717package org .springframework .cloud .function .cloudevent ;
1818
1919import java .net .URI ;
20+ import java .nio .charset .StandardCharsets ;
2021import java .time .OffsetDateTime ;
2122import java .util .Collections ;
2223import 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