Skip to content

Commit 95b139e

Browse files
committed
Add JsonReader.unwrap() to access underlying JsonParser when using avaje-jsonb-jackson
1 parent e3e556a commit 95b139e

File tree

10 files changed

+69
-10
lines changed

10 files changed

+69
-10
lines changed

blackbox-test/src/test/java/org/example/customer/BasicPubFieldsTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import io.avaje.jsonb.JsonType;
44
import io.avaje.jsonb.Jsonb;
5-
//import io.avaje.jsonb.jackson.JacksonIOAdapter;
65
import org.junit.jupiter.api.Test;
76

87
import static org.assertj.core.api.Assertions.assertThat;

jsonb-jackson/src/main/java/io/avaje/jsonb/jackson/JacksonReader.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ final class JacksonReader implements JsonReader {
2222
this.failOnUnknown = failOnUnknown;
2323
}
2424

25+
@Override
26+
public <T> T unwrap(Class<T> type) {
27+
return type.cast(parser);
28+
}
29+
2530
@Override
2631
public void close() {
2732
try {

jsonb-jackson/src/main/java/io/avaje/jsonb/jackson/JacksonWriter.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,9 @@ public void pretty(boolean pretty) {
6565
}
6666
}
6767

68-
@SuppressWarnings("unchecked")
6968
@Override
70-
public <T> T unwrap(Class<T> underlying) {
71-
return (T) generator;
69+
public <T> T unwrap(Class<T> type) {
70+
return type.cast(generator);
7271
}
7372

7473
@Override
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package io.avaje.jsonb.jackson;
2+
3+
import com.fasterxml.jackson.core.JsonLocation;
4+
import com.fasterxml.jackson.core.JsonParser;
5+
import io.avaje.jsonb.JsonReader;
6+
import io.avaje.jsonb.JsonType;
7+
import io.avaje.jsonb.Jsonb;
8+
import org.junit.jupiter.api.Test;
9+
10+
import java.util.Map;
11+
12+
import static org.assertj.core.api.Assertions.assertThat;
13+
14+
class UnwrapJacksonParserTest {
15+
16+
Jsonb jsonb = Jsonb.builder().build();
17+
18+
@Test
19+
void unwrap() {
20+
try (JsonReader reader = jsonb.reader("{\"id\":42,\"name\":\"rob\"}")) {
21+
JsonParser jsonParser = reader.unwrap(JsonParser.class);
22+
JsonLocation location = jsonParser.currentLocation();
23+
24+
assertThat(location.toString()).isEqualTo("[Source: (String)\"{\"id\":42,\"name\":\"rob\"}\"; line: 1, column: 1]");
25+
26+
JsonType<Map<String, Object>> jsonMap = jsonb.type(Object.class).map();
27+
28+
Map<String, Object> map = jsonMap.fromJson(reader);
29+
assertThat(map.get("id")).isEqualTo(42D);
30+
assertThat(map.get("name")).isEqualTo("rob");
31+
}
32+
}
33+
}

jsonb/src/main/java/io/avaje/jsonb/JsonReader.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,20 @@
2626
*/
2727
public interface JsonReader extends Closeable {
2828

29+
/**
30+
* Unwrap and return the underlying JsonParser.
31+
* <p>
32+
* When using avaje-jsonb-jackson this will return the underlying Jackson JsonParser.
33+
*
34+
* <pre>{@code
35+
*
36+
* // when using avaje-jsonb-jackson
37+
* var jacksonParser = jsonReader.unwrap(JsonParser.class);
38+
*
39+
* }</pre>
40+
*/
41+
<T> T unwrap(Class<T> type);
42+
2943
/**
3044
* Read the beginning of an ARRAY or x-json-stream (new line delimited json content).
3145
*/

jsonb/src/main/java/io/avaje/jsonb/JsonWriter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public interface JsonWriter extends Closeable, Flushable {
4949
*
5050
* }</pre>
5151
*/
52-
<T> T unwrap(Class<T> underlying);
52+
<T> T unwrap(Class<T> type);
5353

5454
/**
5555
* Set to serialise null values or not.

jsonb/src/main/java/io/avaje/jsonb/core/ObjectJsonReader.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ final class ObjectJsonReader implements JsonReader {
2424
this.currentValue = source;
2525
}
2626

27+
@Override
28+
public <T> T unwrap(Class<T> type) {
29+
throw new UnsupportedOperationException();
30+
}
31+
2732
@Override
2833
public void unmappedField(String fieldName) {
2934

jsonb/src/main/java/io/avaje/jsonb/spi/DelegateJsonWriter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ public DelegateJsonWriter(JsonWriter delegate) {
1717
}
1818

1919
@Override
20-
public <T> T unwrap(Class<T> underlying) {
21-
return delegate.unwrap(underlying);
20+
public <T> T unwrap(Class<T> type) {
21+
return delegate.unwrap(type);
2222
}
2323

2424
@Override

jsonb/src/main/java/io/avaje/jsonb/stream/JsonReadAdapter.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ final class JsonReadAdapter implements JsonReader {
1616
this.failOnUnknown = failOnUnknown;
1717
}
1818

19+
@Override
20+
public <T> T unwrap(Class<T> type) {
21+
return type.cast(reader);
22+
}
23+
1924
@Override
2025
public void beginStream() {
2126
reader.startStream();

jsonb/src/main/java/io/avaje/jsonb/stream/JsonWriteAdapter.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,9 @@ final class JsonWriteAdapter implements JsonWriter {
2525
this.serializeEmpty = serializeEmpty;
2626
}
2727

28-
@SuppressWarnings("unchecked")
2928
@Override
30-
public <T> T unwrap(Class<T> underlying) {
31-
return (T) generator;
29+
public <T> T unwrap(Class<T> type) {
30+
return type.cast(generator);
3231
}
3332

3433
@Override

0 commit comments

Comments
 (0)