Skip to content

Commit

Permalink
JsonValue.NULL is no longer returned to nonJsonValue values (#574)
Browse files Browse the repository at this point in the history
Signed-off-by: David Kral <david.k.kral@oracle.com>
  • Loading branch information
Verdent committed Aug 31, 2022
1 parent a7fb7a4 commit 325cf97
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,11 @@
class JsonValueDeserializer implements ModelDeserializer<JsonParser> {

private final ModelDeserializer<Object> delegate;
private final JsonValue nullValue;

JsonValueDeserializer(TypeDeserializerBuilder builder) {
delegate = builder.getDelegate();
JsonValueDeserializer(TypeDeserializerBuilder builder, JsonValue nullValue) {
this.delegate = builder.getDelegate();
this.nullValue = nullValue;
}

@Override
Expand All @@ -45,7 +47,7 @@ private JsonValue deserializeValue(JsonParser.Event last, JsonParser parser) {
case VALUE_FALSE:
return JsonValue.FALSE;
case VALUE_NULL:
return JsonValue.NULL;
return nullValue;
case VALUE_STRING:
case VALUE_NUMBER:
return parser.getValue();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,8 +171,10 @@ public static ModelDeserializer<JsonParser> getTypeDeserializer(Class<?> clazz,
return new NullCheckDeserializer(new PositionChecker(valueExtractor, clazz, eventArray), delegate);
}

if (JsonValue.class.isAssignableFrom(builder.getClazz())) {
return new JsonValueDeserializer(builder);
if (JsonValue.class.equals(clazz)) {
return new JsonValueDeserializer(builder, JsonValue.NULL);
} else if (JsonValue.class.isAssignableFrom(clazz)) {
return new JsonValueDeserializer(builder, null);
}
ModelDeserializer<JsonParser> deserializer = assignableCases(builder, eventArray);
if (deserializer != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,22 +12,29 @@

package org.eclipse.yasson.defaultmapping.jsonp;

import org.junit.jupiter.api.*;

import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.*;
import static org.eclipse.yasson.Jsonbs.*;

import org.eclipse.yasson.defaultmapping.jsonp.model.JsonpPojo;
import java.math.BigDecimal;

import jakarta.json.*;
import jakarta.json.Json;
import jakarta.json.JsonArray;
import jakarta.json.JsonArrayBuilder;
import jakarta.json.JsonBuilderFactory;
import jakarta.json.JsonObject;
import jakarta.json.JsonObjectBuilder;
import jakarta.json.JsonString;
import jakarta.json.JsonValue;
import jakarta.json.bind.Jsonb;
import jakarta.json.bind.JsonbBuilder;
import jakarta.json.bind.JsonbConfig;
import jakarta.json.spi.JsonProvider;
import java.math.BigDecimal;
import org.eclipse.yasson.defaultmapping.jsonp.model.JsonpPojo;
import org.junit.jupiter.api.Test;

import static org.eclipse.yasson.Jsonbs.defaultJsonb;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

/**
* Default mapping JSONP integration tests.
Expand Down Expand Up @@ -254,4 +261,22 @@ public void testJsonNullValue() {
deserialized = defaultJsonb.fromJson("{\"jsonValue\":null}", JsonValueWrapper.class);
assertThat(deserialized.jsonValue, is(JsonValue.NULL));
}

@Test
public void testJsonpNullValues() {
JsonpPojo pojo = new JsonpPojo();
String expected = "{}";
String nullValues = "{\"jsonObject\":null, \"jsonArray\":null, \"jsonNumber\":null, \"jsonString\":null, "
+ "\"jsonValue\":null }";
String json = defaultJsonb.toJson(pojo);
assertThat(json, is(expected));
JsonpPojo deserialized = defaultJsonb.fromJson(expected, JsonpPojo.class);
assertThat(deserialized.jsonObject, nullValue());
deserialized = defaultJsonb.fromJson(nullValues, JsonpPojo.class);
assertThat(deserialized.jsonObject, nullValue());
assertThat(deserialized.jsonArray, nullValue());
assertThat(deserialized.jsonNumber, nullValue());
assertThat(deserialized.jsonString, nullValue());
assertThat(deserialized.jsonValue, is(JsonValue.NULL));
}
}

0 comments on commit 325cf97

Please sign in to comment.