@@ -45,8 +45,7 @@ public final class JsonFormat implements EventFormat {
4545 public static final String CONTENT_TYPE = "application/cloudevents+json" ;
4646
4747 private final ObjectMapper mapper ;
48- private final boolean forceDataBase64Serialization ;
49- private final boolean forceStringSerialization ;
48+ private final JsonFormatOptions options ;
5049
5150 /**
5251 * Create a new instance of this class customizing the serialization configuration.
@@ -57,31 +56,86 @@ public final class JsonFormat implements EventFormat {
5756 * @see #withForceNonJsonDataToString()
5857 */
5958 public JsonFormat (boolean forceDataBase64Serialization , boolean forceStringSerialization ) {
59+ this (
60+ JsonFormatOptions .builder ()
61+ .forceDataBase64Serialization (forceDataBase64Serialization )
62+ .forceStringSerialization (forceStringSerialization )
63+ .build ()
64+ );
65+ }
66+
67+ /**
68+ * Create a new instance of this class customizing the serialization configuration.
69+ *
70+ * @param options json serialization / deserialization options
71+ */
72+ public JsonFormat (JsonFormatOptions options ) {
6073 this .mapper = new ObjectMapper ();
61- this .mapper .registerModule (getCloudEventJacksonModule (forceDataBase64Serialization , forceStringSerialization ));
62- this .forceDataBase64Serialization = forceDataBase64Serialization ;
63- this .forceStringSerialization = forceStringSerialization ;
74+ this .mapper .registerModule (getCloudEventJacksonModule (options ));
75+ this .options = options ;
6476 }
6577
6678 /**
6779 * Create a new instance of this class with default serialization configuration
6880 */
6981 public JsonFormat () {
70- this (false , false );
82+ this (new JsonFormatOptions () );
7183 }
7284
7385 /**
7486 * @return a copy of this JsonFormat that serialize events with json data with Base64 encoding
7587 */
7688 public JsonFormat withForceJsonDataToBase64 () {
77- return new JsonFormat (true , this .forceStringSerialization );
89+ return new JsonFormat (
90+ JsonFormatOptions .builder ()
91+ .forceDataBase64Serialization (true )
92+ .forceStringSerialization (this .options .isForceStringSerialization ())
93+ .forceExtensionNameLowerCaseDeserialization (this .options .isForceExtensionNameLowerCaseDeserialization ())
94+ .forceIgnoreInvalidExtensionNameDeserialization (this .options .isForceIgnoreInvalidExtensionNameDeserialization ())
95+ .build ()
96+ );
7897 }
7998
8099 /**
81100 * @return a copy of this JsonFormat that serialize events with non-json data as string
82101 */
83102 public JsonFormat withForceNonJsonDataToString () {
84- return new JsonFormat (this .forceDataBase64Serialization , true );
103+ return new JsonFormat (
104+ JsonFormatOptions .builder ()
105+ .forceDataBase64Serialization (this .options .isForceDataBase64Serialization ())
106+ .forceStringSerialization (true )
107+ .forceExtensionNameLowerCaseDeserialization (this .options .isForceExtensionNameLowerCaseDeserialization ())
108+ .forceIgnoreInvalidExtensionNameDeserialization (this .options .isForceIgnoreInvalidExtensionNameDeserialization ())
109+ .build ()
110+ );
111+ }
112+
113+ /**
114+ * @return a copy of this JsonFormat that deserialize events with converting extension name lower case.
115+ */
116+ public JsonFormat withForceExtensionNameLowerCaseDeserialization () {
117+ return new JsonFormat (
118+ JsonFormatOptions .builder ()
119+ .forceDataBase64Serialization (this .options .isForceDataBase64Serialization ())
120+ .forceStringSerialization (this .options .isForceStringSerialization ())
121+ .forceExtensionNameLowerCaseDeserialization (true )
122+ .forceIgnoreInvalidExtensionNameDeserialization (this .options .isForceIgnoreInvalidExtensionNameDeserialization ())
123+ .build ()
124+ );
125+ }
126+
127+ /**
128+ * @return a copy of this JsonFormat that deserialize events with ignoring invalid extension name
129+ */
130+ public JsonFormat withForceIgnoreInvalidExtensionNameDeserialization () {
131+ return new JsonFormat (
132+ JsonFormatOptions .builder ()
133+ .forceDataBase64Serialization (this .options .isForceDataBase64Serialization ())
134+ .forceStringSerialization (this .options .isForceStringSerialization ())
135+ .forceExtensionNameLowerCaseDeserialization (this .options .isForceExtensionNameLowerCaseDeserialization ())
136+ .forceIgnoreInvalidExtensionNameDeserialization (true )
137+ .build ()
138+ );
85139 }
86140
87141 @ Override
@@ -137,9 +191,24 @@ public static SimpleModule getCloudEventJacksonModule() {
137191 * @see #withForceNonJsonDataToString()
138192 */
139193 public static SimpleModule getCloudEventJacksonModule (boolean forceDataBase64Serialization , boolean forceStringSerialization ) {
194+ return getCloudEventJacksonModule (
195+ JsonFormatOptions .builder ()
196+ .forceDataBase64Serialization (forceDataBase64Serialization )
197+ .forceStringSerialization (forceStringSerialization )
198+ .build ()
199+ );
200+ }
201+
202+ /**
203+ * @param options json serialization / deserialization options
204+ * @return a JacksonModule with CloudEvent serializer/deserializer customizing the data serialization.
205+ */
206+ public static SimpleModule getCloudEventJacksonModule (JsonFormatOptions options ) {
140207 final SimpleModule ceModule = new SimpleModule ("CloudEvent" );
141- ceModule .addSerializer (CloudEvent .class , new CloudEventSerializer (forceDataBase64Serialization , forceStringSerialization ));
142- ceModule .addDeserializer (CloudEvent .class , new CloudEventDeserializer ());
208+ ceModule .addSerializer (CloudEvent .class , new CloudEventSerializer (
209+ options .isForceDataBase64Serialization (), options .isForceStringSerialization ()));
210+ ceModule .addDeserializer (CloudEvent .class , new CloudEventDeserializer (
211+ options .isForceExtensionNameLowerCaseDeserialization (), options .isForceIgnoreInvalidExtensionNameDeserialization ()));
143212 return ceModule ;
144213 }
145214
0 commit comments