8000 Introduce JsonFormatOptions with builder · cloudevents/sdk-java@bd32f3e · GitHub
[go: up one dir, main page]

Skip to content

Commit bd32f3e

Browse files
author
mhyeon-lee
committed
Introduce JsonFormatOptions with builder
Signed-off-by: mhyeon-lee <mhyeon.lee@navercorp.com>
1 parent 2c71c8a commit bd32f3e

File tree

2 files changed

+161
-57
lines changed

2 files changed

+161
-57
lines changed

formats/json-jackson/src/main/java/io/cloudevents/jackson/JsonFormat.java

Lines changed: 62 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
* using Jackson. This format is resolvable with {@link io.cloudevents.core.provider.EventFormatProvider} using the content type {@link #CONTENT_TYPE}.
3636
* <p>
3737
* If you want to use the {@link CloudEvent} serializers/deserializers directly in your mapper, you can use {@link #getCloudEventJacksonModule()} or
38-
* {@link #getCloudEventJacksonModule(boolean, boolean, boolean, boolean)} to get a {@link SimpleModule} to register in your {@link ObjectMapper} instance.
38+
* {@link #getCloudEventJacksonModule(boolean, boolean)} to get a {@link SimpleModule} to register in your {@link ObjectMapper} instance.
3939
*/
4040
public final class JsonFormat implements EventFormat {
4141

@@ -45,60 +45,54 @@ 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;
50-
private final boolean forceExtensionNameLowerCaseDeserialization;
51-
private final boolean forceIgnoreInvalidExtensionNameDeserialization;
48+
private final JsonFormatOptions options;
5249

5350
/**
5451
* Create a new instance of this class customizing the serialization configuration.
5552
*
5653
* @param forceDataBase64Serialization force json base64 encoding for data
5754
* @param forceStringSerialization force string serialization for non json data field
58-
* @param forceExtensionNameLowerCaseDeserialization force extension name deserialization for lower case
59-
* @param forceIgnoreInvalidExtensionNameDeserialization force extension name deserialization for ignoring invalid name
6055
* @see #withForceJsonDataToBase64()
6156
* @see #withForceNonJsonDataToString()
62-
* @see #withForceExtensionNameLowerCaseDeserialization()
63-
* @see #withForceIgnoreInvalidExtensionNameDeserialization()
6457
*/
65-
public JsonFormat(
66-
boolean forceDataBase64Serialization,
67-
boolean forceStringSerialization,
68-
boolean forceExtensionNameLowerCaseDeserialization,
69-
boolean forceIgnoreInvalidExtensionNameDeserialization
70-
) {
71-
this.mapper = new ObjectMapper();
72-
this.mapper.registerModule(
73-
getCloudEventJacksonModule(
74-
forceDataBase64Serialization,
75-
forceStringSerialization,
76-
forceExtensionNameLowerCaseDeserialization,
77-
forceIgnoreInvalidExtensionNameDeserialization
78-
)
58+
public JsonFormat(boolean forceDataBase64Serialization, boolean forceStringSerialization) {
59+
this(
60+
JsonFormatOptions.builder()
61+
.forceDataBase64Serialization(forceDataBase64Serialization)
62+
.forceStringSerialization(forceStringSerialization)
63+
.build()
7964
);
80-
this.forceDataBase64Serialization = forceDataBase64Serialization;
81-
this.forceStringSeri 10000 alization = forceStringSerialization;
82-
this.forceExtensionNameLowerCaseDeserialization = forceExtensionNameLowerCaseDeserialization;
83-
this.forceIgnoreInvalidExtensionNameDeserialization = forceIgnoreInvalidExtensionNameDeserialization;
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) {
73+
this.mapper = new ObjectMapper();
74+
this.mapper.registerModule(getCloudEventJacksonModule(options));
75+
this.options = options;
8476
}
8577

8678
/**
8779
* Create a new instance of this class with default serialization configuration
8880
*/
8981
public JsonFormat() {
90-
this(false, false, false, false);
82+
this(new JsonFormatOptions());
9183
}
9284

9385
/**
9486
* @return a copy of this JsonFormat that serialize events with json data with Base64 encoding
9587
*/
9688
public JsonFormat withForceJsonDataToBase64() {
9789
return new JsonFormat(
98-
true,
99-
this.forceStringSerialization,
100-
this.forceExtensionNameLowerCaseDeserialization,
101-
this.forceIgnoreInvalidExtensionNameDeserialization
90+
JsonFormatOptions.builder()
91+
.forceDataBase64Serialization(true)
92+
.forceStringSerialization(this.options.isForceStringSerialization())
93+
.forceExtensionNameLowerCaseDeserialization(this.options.isForceExtensionNameLowerCaseDeserialization())
94+
.forceIgnoreInvalidExtensionNameDeserialization(this.options.isForceIgnoreInvalidExtensionNameDeserialization())
95+
.build()
10296
);
10397
}
10498

@@ -107,10 +101,12 @@ public JsonFormat withForceJsonDataToBase64() {
107101
*/
108102
public JsonFormat withForceNonJsonDataToString() {
109103
return new JsonFormat(
110-
this.forceDataBase64Serialization,
111-
true,
112-
this.forceExtensionNameLowerCaseDeserialization,
113-
this.forceIgnoreInvalidExtensionNameDeserialization
104+
JsonFormatOptions.builder()
105+
.forceDataBase64Serialization(this.options.isForceDataBase64Serialization())
106+
.forceStringSerialization(true)
107+
.forceExtensionNameLowerCaseDeserialization(this.options.isForceExtensionNameLowerCaseDeserialization())
108+
.forceIgnoreInvalidExtensionNameDeserialization(this.options.isForceIgnoreInvalidExtensionNameDeserialization())
109+
.build()
114110
);
115111
}
116112

@@ -119,10 +115,12 @@ public JsonFormat withForceNonJsonDataToString() {
119115
*/
120116
public JsonFormat withForceExtensionNameLowerCaseDeserialization() {
121117
return new JsonFormat(
122-
this.forceDataBase64Serialization,
123-
this.forceStringSerialization,
124-
true,
125-
this.forceIgnoreInvalidExtensionNameDeserialization
118+
JsonFormatOptions.builder()
119+
.forceDataBase64Serialization(this.options.isForceDataBase64Serialization())
120+
.forceStringSerialization(this.options.isForceStringSerialization())
121+
.forceExtensionNameLowerCaseDeserialization(true)
122+
.forceIgnoreInvalidExtensionNameDeserialization(this.options.isForceIgnoreInvalidExtensionNameDeserialization())
123+
.build()
126124
);
127125
}
128126

@@ -131,10 +129,12 @@ public JsonFormat withForceExtensionNameLowerCaseDeserialization() {
131129
*/
132130
public JsonFormat withForceIgnoreInvalidExtensionNameDeserialization() {
133131
return new JsonFormat(
134-
this.forceDataBase64Serialization,
135-
this.forceStringSerialization,
136-
this.forceExtensionNameLowerCaseDeserialization,
137-
true
132+
JsonFormatOptions.builder()
133+
.forceDataBase64Serialization(this.options.isForceDataBase64Serialization())
134+
.forceStringSerialization(this.options.isForceStringSerialization())
135+
.forceExtensionNameLowerCaseDeserialization(this.options.isForceExtensionNameLowerCaseDeserialization())
136+
.forceIgnoreInvalidExtensionNameDeserialization(true)
137+
.build()
138138
);
139139
}
140140

@@ -180,30 +180,35 @@ public String serializedContentType() {
180180
* @return a {@link SimpleModule} with {@link CloudEvent} serializer/deserializer configured using default values.
181181
*/
182182
public static SimpleModule getCloudEventJacksonModule() {
183-
return getCloudEventJacksonModule(false, false, false, false);
183+
return getCloudEventJacksonModule(false, false);
184184
}
185185

186186
/**
187187
* @param forceDataBase64Serialization force json base64 encoding for data
188188
* @param forceStringSerialization force string serialization for non json data field
189-
* @param forceExtensionNameLowerCaseDeserialization force extension name deserialization for lower case
190-
* @param forceIgnoreInvalidExtensionNameDeserialization force extension name deserialization for ignoring invalid name
191189
* @return a JacksonModule with CloudEvent serializer/deserializer customizing the data serialization.
192190
* @see #withForceJsonDataToBase64()
193191
* @see #withForceNonJsonDataToString()
194-
* @see #withForceExtensionNameLowerCaseDeserialization()
195-
* @see #withForceIgnoreInvalidExtensionNameDeserialization()
196192
*/
197-
public static SimpleModule getCloudEventJacksonModule(
198-
boolean forceDataBase64Serialization,
199-
boolean forceStringSerialization,
200-
boolean forceExtensionNameLowerCaseDeserialization,
201-
boolean forceIgnoreInvalidExtensionNameDeserialization
202-
) {
193+
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) {
203207
final SimpleModule ceModule = new SimpleModule("CloudEvent");
204-
ceModule.addSerializer(CloudEvent.class, new CloudEventSerializer(forceDataBase64Serialization, forceStringSerialization));
208+
ceModule.addSerializer(CloudEvent.class, new CloudEventSerializer(
209+
options.isForceDataBase64Serialization(), options.isForceStringSerialization()));
205210
ceModule.addDeserializer(CloudEvent.class, new CloudEventDeserializer(
206-
forceExtensionNameLowerCaseDeserialization, forceIgnoreInvalidExtensionNameDeserialization));
211+
options.isForceExtensionNameLowerCaseDeserialization(), options.isForceIgnoreInvalidExtensionNameDeserialization()));
207212
return ceModule;
208213
}
209214

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
/*
2+
* Copyright 2018-Present The CloudEvents Authors
3+
* <p>
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
* <p>
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
* <p>
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*
16+
*/
17+
package io.cloudevents.jackson;
18+
19+
public final class JsonFormatOptions {
20+
private final boolean forceDataBase64Serialization;
21+
private final boolean forceStringSerialization;
22+
private final boolean forceExtensionNameLowerCaseDeserialization;
23+
private final boolean forceIgnoreInvalidExtensionNameDeserialization;
24+
25+
/**
26+
* Create a new instance of this class options the serialization / deserialization.
27+
*/
28+
public JsonFormatOptions() {
29+
this(false, false, false, false);
30+
}
31+
32+
JsonFormatOptions(
33+
boolean forceDataBase64Serialization,
34+
boolean forceStringSerialization,
35+
boolean forceExtensionNameLowerCaseDeserialization,
36+
boolean forceIgnoreInvalidExtensionNameDeserialization
37+
) {
38+
this.forceDataBase64Serialization = forceDataBase64Serialization;
39+
this.forceStringSerialization = forceStringSerialization;
40+
this.forceExtensionNameLowerCaseDeserialization = forceExtensionNameLowerCaseDeserialization;
41+
this.forceIgnoreInvalidExtensionNameDeserialization = forceIgnoreInvalidExtensionNameDeserialization;
42+
}
43+
44+
public static JsonFormatOptionsBuilder builder() {
45+
return new JsonFormatOptionsBuilder();
46+
}
47+
48+
public boolean isForceDataBase64Serialization() {
49+
return this.forceDataBase64Serialization;
50+
}
51+
52+
public boolean isForceStringSerialization() {
53+
return this.forceStringSerialization;
54+
}
55+
56+
public boolean isForceExtensionNameLowerCaseDeserialization() {
57+
return this.forceExtensionNameLowerCaseDeserialization;
58+
}
59+
60+
public boolean isForceIgnoreInvalidExtensionNameDeserialization() {
61+
return this.forceIgnoreInvalidExtensionNameDeserialization;
62+
}
63+
64+
public static class JsonFormatOptionsBuilder {
65+
private boolean forceDataBase64Serialization = false;
66+
private boolean forceStringSerialization = false;
67+
private boolean forceExtensionNameLowerCaseDeserialization = false;
68+
private boolean forceIgnoreInvalidExtensionNameDeserialization = false;
69+
70+
public JsonFormatOptionsBuilder forceDataBase64Serialization(boolean forceDataBase64Serialization) {
71+
this.forceDataBase64Serialization = forceDataBase64Serialization;
72+
return this;
73+
}
74+
75+
public JsonFormatOptionsBuilder forceStringSerialization(boolean forceStringSerialization) {
76+
this.forceStringSerialization = forceStringSerialization;
77+
return this;
78+
}
79+
80+
public JsonFormatOptionsBuilder forceExtensionNameLowerCaseDeserialization(boolean forceExtensionNameLowerCaseDeserialization) {
81+
this.forceExtensionNameLowerCaseDeserialization = forceExtensionNameLowerCaseDeserialization;
82+
return this;
83+
}
84+
85+
public JsonFormatOptionsBuilder forceIgnoreInvalidExtensionNameDeserialization(boolean forceIgnoreInvalidExtensionNameDeserialization) {
86+
this.forceIgnoreInvalidExtensionNameDeserialization = forceIgnoreInvalidExtensionNameDeserialization;
87+
return this;
88+
}
89+
90+
public JsonFormatOptions build() {
91+
return new JsonFormatOptions(
92+
this.forceDataBase64Serialization,
93+
this.forceStringSerialization,
94+
this.forceExtensionNameLowerCaseDeserialization,
95+
this.forceIgnoreInvalidExtensionNameDeserialization
96+
);
97+
}
98+
}
99+
}

0 commit comments

Comments
 (0)
0