diff --git a/api/src/main/java/io/cloudevents/format/BinaryMarshaller.java b/api/src/main/java/io/cloudevents/format/BinaryMarshaller.java index 51062aa5..709b900b 100644 --- a/api/src/main/java/io/cloudevents/format/BinaryMarshaller.java +++ b/api/src/main/java/io/cloudevents/format/BinaryMarshaller.java @@ -146,9 +146,7 @@ public class BinaryMarshaller { .collect(Collectors.toMap(Entry::getKey, Entry::getValue)); }) .headers(BinaryFormatHeaderMapperImpl.mapper()::map) - .payload((data, headers) -> { - return Json.encode(data); - }) + .payload(Json.marshaller()::marshal) .build((payload, headers) -> { return new Format<>(payload, headers); }); diff --git a/api/src/main/java/io/cloudevents/json/Json.java b/api/src/main/java/io/cloudevents/json/Json.java index 65c5a88f..a9c3a49a 100644 --- a/api/src/main/java/io/cloudevents/json/Json.java +++ b/api/src/main/java/io/cloudevents/json/Json.java @@ -21,10 +21,12 @@ import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; import io.cloudevents.Attributes; +import io.cloudevents.fun.DataMarshaller; import io.cloudevents.fun.DataUnmarshaller; import java.io.InputStream; import java.time.ZonedDateTime; +import java.util.Map; public final class Json { @@ -116,6 +118,21 @@ public final class Json { } }; } + + /** + * Creates a JSON Data Marshaller + * @param The 'data' type + * @return A new instance of {@link DataMarshaller} + */ + public static DataMarshaller marshaller() { + return new DataMarshaller() { + @Override + public String marshal(T data, Map headers) + throws Exception { + return Json.encode(data); + } + }; + } private Json() { // no-op