Skip to content

Commit 325cf97

Browse files
authored
JsonValue.NULL is no longer returned to nonJsonValue values (#574)
Signed-off-by: David Kral <[email protected]>
1 parent a7fb7a4 commit 325cf97

File tree

3 files changed

+45
-16
lines changed

3 files changed

+45
-16
lines changed

src/main/java/org/eclipse/yasson/internal/deserializer/types/JsonValueDeserializer.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,11 @@
2727
class JsonValueDeserializer implements ModelDeserializer<JsonParser> {
2828

2929
private final ModelDeserializer<Object> delegate;
30+
private final JsonValue nullValue;
3031

31-
JsonValueDeserializer(TypeDeserializerBuilder builder) {
32-
delegate = builder.getDelegate();
32+
JsonValueDeserializer(TypeDeserializerBuilder builder, JsonValue nullValue) {
33+
this.delegate = builder.getDelegate();
34+
this.nullValue = nullValue;
3335
}
3436

3537
@Override
@@ -45,7 +47,7 @@ private JsonValue deserializeValue(JsonParser.Event last, JsonParser parser) {
4547
case VALUE_FALSE:
4648
return JsonValue.FALSE;
4749
case VALUE_NULL:
48-
return JsonValue.NULL;
50+
return nullValue;
4951
case VALUE_STRING:
5052
case VALUE_NUMBER:
5153
return parser.getValue();

src/main/java/org/eclipse/yasson/internal/deserializer/types/TypeDeserializers.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -171,8 +171,10 @@ public static ModelDeserializer<JsonParser> getTypeDeserializer(Class<?> clazz,
171171
return new NullCheckDeserializer(new PositionChecker(valueExtractor, clazz, eventArray), delegate);
172172
}
173173

174-
if (JsonValue.class.isAssignableFrom(builder.getClazz())) {
175-
return new JsonValueDeserializer(builder);
174+
if (JsonValue.class.equals(clazz)) {
175+
return new JsonValueDeserializer(builder, JsonValue.NULL);
176+
} else if (JsonValue.class.isAssignableFrom(clazz)) {
177+
return new JsonValueDeserializer(builder, null);
176178
}
177179
ModelDeserializer<JsonParser> deserializer = assignableCases(builder, eventArray);
178180
if (deserializer != null) {

src/test/java/org/eclipse/yasson/defaultmapping/jsonp/JsonpTest.java

+36-11
Original file line numberDiff line numberDiff line change
@@ -12,22 +12,29 @@
1212

1313
package org.eclipse.yasson.defaultmapping.jsonp;
1414

15-
import org.junit.jupiter.api.*;
16-
17-
import static org.hamcrest.CoreMatchers.is;
18-
import static org.hamcrest.CoreMatchers.nullValue;
19-
import static org.hamcrest.MatcherAssert.assertThat;
20-
import static org.junit.jupiter.api.Assertions.*;
21-
import static org.eclipse.yasson.Jsonbs.*;
22-
23-
import org.eclipse.yasson.defaultmapping.jsonp.model.JsonpPojo;
15+
import java.math.BigDecimal;
2416

25-
import jakarta.json.*;
17+
import jakarta.json.Json;
18+
import jakarta.json.JsonArray;
19+
import jakarta.json.JsonArrayBuilder;
20+
import jakarta.json.JsonBuilderFactory;
21+
import jakarta.json.JsonObject;
22+
import jakarta.json.JsonObjectBuilder;
23+
import jakarta.json.JsonString;
24+
import jakarta.json.JsonValue;
2625
import jakarta.json.bind.Jsonb;
2726
import jakarta.json.bind.JsonbBuilder;
2827
import jakarta.json.bind.JsonbConfig;
2928
import jakarta.json.spi.JsonProvider;
30-
import java.math.BigDecimal;
29+
import org.eclipse.yasson.defaultmapping.jsonp.model.JsonpPojo;
30+
import org.junit.jupiter.api.Test;
31+
32+
import static org.eclipse.yasson.Jsonbs.defaultJsonb;
33+
import static org.hamcrest.CoreMatchers.is;
34+
import static org.hamcrest.CoreMatchers.nullValue;
35+
import static org.hamcrest.MatcherAssert.assertThat;
36+
import static org.junit.jupiter.api.Assertions.assertEquals;
37+
import static org.junit.jupiter.api.Assertions.assertTrue;
3138

3239
/**
3340
* Default mapping JSONP integration tests.
@@ -254,4 +261,22 @@ public void testJsonNullValue() {
254261
deserialized = defaultJsonb.fromJson("{\"jsonValue\":null}", JsonValueWrapper.class);
255262
assertThat(deserialized.jsonValue, is(JsonValue.NULL));
256263
}
264+
265+
@Test
266+
public void testJsonpNullValues() {
267+
JsonpPojo pojo = new JsonpPojo();
268+
String expected = "{}";
269+
String nullValues = "{\"jsonObject\":null, \"jsonArray\":null, \"jsonNumber\":null, \"jsonString\":null, "
270+
+ "\"jsonValue\":null }";
271+
String json = defaultJsonb.toJson(pojo);
272+
assertThat(json, is(expected));
273+
JsonpPojo deserialized = defaultJsonb.fromJson(expected, JsonpPojo.class);
274+
assertThat(deserialized.jsonObject, nullValue());
275+
deserialized = defaultJsonb.fromJson(nullValues, JsonpPojo.class);
276+
assertThat(deserialized.jsonObject, nullValue());
277+
assertThat(deserialized.jsonArray, nullValue());
278+
assertThat(deserialized.jsonNumber, nullValue());
279+
assertThat(deserialized.jsonString, nullValue());
280+
assertThat(deserialized.jsonValue, is(JsonValue.NULL));
281+
}
257282
}

0 commit comments

Comments
 (0)