Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions json-node/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,13 @@
<dependency>
<groupId>io.avaje</groupId>
<artifactId>avaje-json-core</artifactId>
<version>3.9-SNAPSHOT</version>
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>io.avaje</groupId>
<artifactId>avaje-jsonb</artifactId>
<version>3.0-RC1</version>
<version>${project.version}</version>
<optional>true</optional>
</dependency>

Expand All @@ -48,7 +48,6 @@
<version>1.6</version>
<scope>test</scope>
</dependency>

</dependencies>

</project>
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,15 @@ final class DJsonNodeMapper implements JsonNodeMapper {
static final NumberAdapter NUMBER_ADAPTER = new NumberAdapter();

private final JsonStream jsonStream;
private final NodeAdapter nodeAdapter;
private final ObjectAdapter objectAdapter;
private final ArrayAdapter arrayAdapter;
private final JsonAdapter<JsonNode> nodeAdapter;
private final JsonAdapter<JsonObject> objectAdapter;
private final JsonAdapter<JsonArray> arrayAdapter;

DJsonNodeMapper(JsonStream jsonStream, NodeAdapter nodeAdapter, ObjectAdapter objectAdapter, ArrayAdapter arrayAdapter) {
this.jsonStream = jsonStream;
this.nodeAdapter = nodeAdapter;
this.objectAdapter = objectAdapter;
this.arrayAdapter = arrayAdapter;
this.nodeAdapter = nodeAdapter.nullSafe();
this.objectAdapter = objectAdapter.nullSafe();
this.arrayAdapter = arrayAdapter.nullSafe();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package io.avaje.json.node.adapter;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;

import org.junit.jupiter.api.Test;

import io.avaje.json.node.JsonObject;
import io.avaje.jsonb.Jsonb;

class NullJsonObjectTest {
static class WrapJsonObject {
public JsonObject json;
}

@Test
void test() {
var b = Jsonb.builder();
new JsonNodeComponent().register(b);
var type =
b.add(WrapJsonObject.class, WrapJsonObjectJsonAdapter::new)
.build()
.type(WrapJsonObject.class);
WrapJsonObject fromJson = type.fromJson("{\"json\":null}");
assertNull(fromJson.json);
assertEquals("{}", type.toJson(fromJson));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package io.avaje.json.node.adapter;

import java.lang.invoke.MethodHandle;

import io.avaje.json.JsonAdapter;
import io.avaje.json.JsonReader;
import io.avaje.json.JsonWriter;
import io.avaje.json.PropertyNames;
import io.avaje.json.node.JsonObject;
import io.avaje.json.node.adapter.NullJsonObjectTest.WrapJsonObject;
import io.avaje.json.view.ViewBuilder;
import io.avaje.json.view.ViewBuilderAware;
import io.avaje.jsonb.Jsonb;
import io.avaje.jsonb.spi.Generated;

@Generated("io.avaje.jsonb.generator")
public final class WrapJsonObjectJsonAdapter implements JsonAdapter<WrapJsonObject>, ViewBuilderAware {

// naming convention Match
// json [io.avaje.json.node.JsonObject] name:json publicField

private final JsonAdapter<JsonObject> jsonObjectJsonAdapter;
private final PropertyNames names;

public WrapJsonObjectJsonAdapter(Jsonb jsonb) {
this.jsonObjectJsonAdapter = jsonb.adapter(JsonObject.class);
this.names = jsonb.properties("json");
}

@Override
public void toJson(JsonWriter writer, WrapJsonObject _wrapJsonObject) {
writer.beginObject(names);
writer.name(0);
jsonObjectJsonAdapter.toJson(writer, _wrapJsonObject.json);
writer.endObject();
}

@Override
public WrapJsonObject fromJson(JsonReader reader) {
// variables to read json values into, constructor params don't need _set$ flags
JsonObject _val$json = null; boolean _set$json = false;

// read json
reader.beginObject(names);
while (reader.hasNextField()) {
final String fieldName = reader.nextField();
switch (fieldName) {
case "json":
_val$json = jsonObjectJsonAdapter.fromJson(reader);
_set$json = true;
break;

default:
reader.unmappedField(fieldName);
reader.skipValue();
}
}
reader.endObject();

// build and return WrapJsonObject
WrapJsonObject _$wrapJsonObject = new WrapJsonObject();
if (_set$json) _$wrapJsonObject.json = _val$json;
return _$wrapJsonObject;
}

@SuppressWarnings("unchecked")
@Override
public boolean isViewBuilderAware() {
return true;
}

@Override
public ViewBuilderAware viewBuild() {
return this;
}

@Override
public void build(ViewBuilder builder, String name, MethodHandle handle) {
builder.beginObject(name, handle);
builder.add("json", jsonObjectJsonAdapter, builder.field(WrapJsonObject.class, "json"));
builder.endObject();
}
}