Skip to content

Commit b95b42b

Browse files
committed
Error in running the zerocode tests in JDK23/21 authorjapps#704
1 parent 82c187c commit b95b42b

File tree

5 files changed

+105
-0
lines changed

5 files changed

+105
-0
lines changed

core/pom.xml

+17
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,24 @@
120120
<groupId>org.jukito</groupId>
121121
<artifactId>jukito</artifactId>
122122
<scope>test</scope>
123+
<exclusions>
124+
<exclusion>
125+
<groupId>org.mockito</groupId>
126+
<artifactId>mockito-core</artifactId>
127+
</exclusion>
128+
</exclusions>
123129
</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+
124141
<dependency>
125142
<groupId>com.google.inject</groupId>
126143
<artifactId>guice</artifactId>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
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 numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
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+
}

core/src/main/java/org/jsmart/zerocode/core/di/provider/GsonSerDeProvider.java

+4
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,20 @@
1111
import jakarta.inject.Provider;
1212
import org.apache.kafka.common.header.Headers;
1313
import org.apache.kafka.common.header.internals.RecordHeaders;
14+
import org.jsmart.zerocode.core.di.module.OptionalTypeAdapterFactory;
1415

1516
import java.io.IOException;
1617
import java.util.HashMap;
1718
import java.util.Map;
19+
import java.util.Optional;
1820

1921
public class GsonSerDeProvider implements Provider<Gson> {
2022

2123
@Override
2224
public Gson get() {
2325
return new GsonBuilder()
2426
.registerTypeAdapterFactory(KafkaHeadersAdapter.FACTORY)
27+
.registerTypeAdapterFactory(new OptionalTypeAdapterFactory())
2528
.create();
2629
}
2730

@@ -61,6 +64,7 @@ public Headers read(JsonReader reader) throws IOException {
6164
JsonToken peek = reader.peek();
6265
if (JsonToken.NULL.equals(peek)) {
6366
reader.nextNull();
67+
6468
} else {
6569
Map<String, String> map = gson.getAdapter(Map.class).read(reader);
6670

pom.xml

+17
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
<jsonassert.version>1.5.1</jsonassert.version>
7171
<classpath-explorer.version>1.0</classpath-explorer.version>
7272
<jukito.version>1.5</jukito.version>
73+
<mockito.version>5.15.2</mockito.version>
7374
<guice.version>7.0.0</guice.version>
7475
<jayway-version>2.9.0</jayway-version>
7576
<json-smart.version>2.5.0</json-smart.version>
@@ -216,6 +217,22 @@
216217
<groupId>org.jukito</groupId>
217218
<artifactId>jukito</artifactId>
218219
<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>
219236
</dependency>
220237
<dependency>
221238
<groupId>com.google.inject</groupId>

0 commit comments

Comments
 (0)