File tree 5 files changed +105
-0
lines changed
src/main/java/org/jsmart/zerocode/core/di
5 files changed +105
-0
lines changed Original file line number Diff line number Diff line change 120
120
<groupId >org.jukito</groupId >
121
121
<artifactId >jukito</artifactId >
122
122
<scope >test</scope >
123
+ <exclusions >
124
+ <exclusion >
125
+ <groupId >org.mockito</groupId >
126
+ <artifactId >mockito-core</artifactId >
127
+ </exclusion >
128
+ </exclusions >
123
129
</dependency >
130
+ <dependency >
131
+ <groupId >org.mockito</groupId >
132
+ <artifactId >mockito-core</artifactId >
133
+ <version >${mockito.version} </version >
134
+ </dependency >
135
+ <dependency >
136
+ <groupId >org.mockito</groupId >
137
+ <artifactId >mockito-junit-jupiter</artifactId >
138
+ <version >${mockito.version} </version >
139
+ </dependency >
140
+
124
141
<dependency >
125
142
<groupId >com.google.inject</groupId >
126
143
<artifactId >guice</artifactId >
Original file line number Diff line number Diff line change
1
+ package org .jsmart .zerocode .core .di .module ;
2
+
3
+ import com .google .gson .TypeAdapter ;
4
+ import com .google .gson .stream .JsonReader ;
5
+ import com .google .gson .stream .JsonWriter ;
6
+ import java .io .IOException ;
7
+ import java .util .Optional ;
8
+
9
+ public class OptionalTypeAdapter <T > extends TypeAdapter <Optional <T >> {
10
+ private final TypeAdapter <T > delegate ;
11
+
12
+ public OptionalTypeAdapter (TypeAdapter <T > delegate ) {
13
+ this .delegate = delegate ;
14
+ }
15
+
16
+ @ Override
17
+ public void write (JsonWriter out , Optional <T > value ) throws IOException {
18
+ if (value == null || !value .isPresent ()) {
19
+ out .nullValue ();
20
+ } else {
21
+ delegate .write (out , value .get ());
22
+ }
23
+ }
24
+
25
+ @ Override
26
+ public Optional <T > read (JsonReader in ) throws IOException {
27
+ if (in .peek () == com .google .gson .stream .JsonToken .NULL ) {
28
+ in .nextNull ();
29
+ return Optional .empty ();
30
+ } else {
31
+ return Optional .ofNullable (delegate .read (in ));
32
+ }
33
+ }
34
+
35
+ public static <T > TypeAdapter <Optional <T >> factory (TypeAdapter <T > delegate ) {
36
+ return new OptionalTypeAdapter <>(delegate );
37
+ }
38
+ }
Original file line number Diff line number Diff line change
1
+ package org .jsmart .zerocode .core .di .module ;
2
+
3
+ import com .google .gson .Gson ;
4
+ import com .google .gson .TypeAdapter ;
5
+ import com .google .gson .TypeAdapterFactory ;
6
+ import com .google .gson .reflect .TypeToken ;
7
+
8
+ import java .lang .reflect .ParameterizedType ;
9
+ import java .lang .reflect .Type ;
10
+ import java .util .Optional ;
11
+
12
+ public class OptionalTypeAdapterFactory implements TypeAdapterFactory {
13
+
14
+ @ Override
15
+ public <T > TypeAdapter <T > create (Gson gson , TypeToken <T > typeToken ) {
16
+ if (!Optional .class .isAssignableFrom (typeToken .getRawType ())) {
17
+ return null ;
18
+ }
19
+
20
+ Type type = typeToken .getType ();
21
+ if (type instanceof ParameterizedType ) {
22
+ Type elementType = ((ParameterizedType ) type ).getActualTypeArguments ()[0 ];
23
+ TypeAdapter <?> elementAdapter = gson .getAdapter (TypeToken .get (elementType ));
24
+ return (TypeAdapter <T >) OptionalTypeAdapter .factory (elementAdapter );
25
+ }
26
+
27
+ return null ;
28
+ }
29
+ }
Original file line number Diff line number Diff line change 11
11
import jakarta .inject .Provider ;
12
12
import org .apache .kafka .common .header .Headers ;
13
13
import org .apache .kafka .common .header .internals .RecordHeaders ;
14
+ import org .jsmart .zerocode .core .di .module .OptionalTypeAdapterFactory ;
14
15
15
16
import java .io .IOException ;
16
17
import java .util .HashMap ;
17
18
import java .util .Map ;
19
+ import java .util .Optional ;
18
20
19
21
public class GsonSerDeProvider implements Provider <Gson > {
20
22
21
23
@ Override
22
24
public Gson get () {
23
25
return new GsonBuilder ()
24
26
.registerTypeAdapterFactory (KafkaHeadersAdapter .FACTORY )
27
+ .registerTypeAdapterFactory (new OptionalTypeAdapterFactory ())
25
28
.create ();
26
29
}
27
30
@@ -61,6 +64,7 @@ public Headers read(JsonReader reader) throws IOException {
61
64
JsonToken peek = reader .peek ();
62
65
if (JsonToken .NULL .equals (peek )) {
63
66
reader .nextNull ();
67
+
64
68
} else {
65
69
Map <String , String > map = gson .getAdapter (Map .class ).read (reader );
66
70
Original file line number Diff line number Diff line change 70
70
<jsonassert .version>1.5.1</jsonassert .version>
71
71
<classpath-explorer .version>1.0</classpath-explorer .version>
72
72
<jukito .version>1.5</jukito .version>
73
+ <mockito .version>5.15.2</mockito .version>
73
74
<guice .version>7.0.0</guice .version>
74
75
<jayway-version >2.9.0</jayway-version >
75
76
<json-smart .version>2.5.0</json-smart .version>
216
217
<groupId >org.jukito</groupId >
217
218
<artifactId >jukito</artifactId >
218
219
<version >${jukito.version} </version >
220
+ <exclusions >
221
+ <exclusion >
222
+ <groupId >org.mockito</groupId >
223
+ <artifactId >mockito-core</artifactId >
224
+ </exclusion >
225
+ </exclusions >
226
+ </dependency >
227
+ <dependency >
228
+ <groupId >org.mockito</groupId >
229
+ <artifactId >mockito-core</artifactId >
230
+ <version >${mockito.version} </version >
231
+ </dependency >
232
+ <dependency >
233
+ <groupId >org.mockito</groupId >
234
+ <artifactId >mockito-junit-jupiter</artifactId >
235
+ <version >${mockito.version} </version >
219
236
</dependency >
220
237
<dependency >
221
238
<groupId >com.google.inject</groupId >
You can’t perform that action at this time.
0 commit comments