From 559a92c344eb5d97b9cfbea0f73301d7b8912cdd Mon Sep 17 00:00:00 2001 From: Anders Swanson Date: Fri, 28 Mar 2025 10:20:50 -0700 Subject: [PATCH 1/2] JSONB: Create Default method Signed-off-by: Anders Swanson --- .../src/main/java/com/oracle/spring/json/jsonb/JSONB.java | 7 ++++++- .../test/java/com/oracle/spring/json/jsonb/JSONBTest.java | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/database/starters/oracle-spring-boot-starter-json-collections/src/main/java/com/oracle/spring/json/jsonb/JSONB.java b/database/starters/oracle-spring-boot-starter-json-collections/src/main/java/com/oracle/spring/json/jsonb/JSONB.java index ee577524..edc2fd2e 100644 --- a/database/starters/oracle-spring-boot-starter-json-collections/src/main/java/com/oracle/spring/json/jsonb/JSONB.java +++ b/database/starters/oracle-spring-boot-starter-json-collections/src/main/java/com/oracle/spring/json/jsonb/JSONB.java @@ -1,4 +1,4 @@ -// Copyright (c) 2024, Oracle and/or its affiliates. +// Copyright (c) 2024, 2025, Oracle and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. package com.oracle.spring.json.jsonb; @@ -7,6 +7,7 @@ import java.io.InputStream; import java.nio.ByteBuffer; +import jakarta.json.bind.JsonbBuilder; import jakarta.json.stream.JsonGenerator; import jakarta.json.stream.JsonParser; import oracle.sql.json.OracleJsonFactory; @@ -16,6 +17,10 @@ public class JSONB { private final OracleJsonFactory oracleJsonFactory; private final YassonJsonb jsonb; + public static JSONB createDefault() { + return new JSONB(new OracleJsonFactory(), (YassonJsonb) JsonbBuilder.create()); + } + public JSONB(OracleJsonFactory oracleJsonFactory, YassonJsonb jsonb) { this.oracleJsonFactory = oracleJsonFactory; this.jsonb = jsonb; diff --git a/database/starters/oracle-spring-boot-starter-json-collections/src/test/java/com/oracle/spring/json/jsonb/JSONBTest.java b/database/starters/oracle-spring-boot-starter-json-collections/src/test/java/com/oracle/spring/json/jsonb/JSONBTest.java index 8ea98488..bc47e525 100644 --- a/database/starters/oracle-spring-boot-starter-json-collections/src/test/java/com/oracle/spring/json/jsonb/JSONBTest.java +++ b/database/starters/oracle-spring-boot-starter-json-collections/src/test/java/com/oracle/spring/json/jsonb/JSONBTest.java @@ -1,4 +1,4 @@ -// Copyright (c) 2024, Oracle and/or its affiliates. +// Copyright (c) 2024, 2025, Oracle and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. package com.oracle.spring.json.jsonb; @@ -18,7 +18,7 @@ public class JSONBTest { - private JSONB jsonb = new JSONB(new OracleJsonFactory(), (YassonJsonb) JsonbBuilder.create()); + private JSONB jsonb = JSONB.createDefault(); private Student s = new Student(Student.newId(), "Alice", new StudentDetails( "Mathematics", 3.77, From d907733ff6632fb1a6f166bccd16146019f8340b Mon Sep 17 00:00:00 2001 From: Anders Swanson Date: Fri, 28 Mar 2025 10:24:24 -0700 Subject: [PATCH 2/2] Add tests Signed-off-by: Anders Swanson --- .../com/oracle/spring/json/jsonb/JSONB.java | 7 +++++++ .../oracle/spring/json/jsonb/JSONBTest.java | 20 ++++++++++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/database/starters/oracle-spring-boot-starter-json-collections/src/main/java/com/oracle/spring/json/jsonb/JSONB.java b/database/starters/oracle-spring-boot-starter-json-collections/src/main/java/com/oracle/spring/json/jsonb/JSONB.java index edc2fd2e..cb78f544 100644 --- a/database/starters/oracle-spring-boot-starter-json-collections/src/main/java/com/oracle/spring/json/jsonb/JSONB.java +++ b/database/starters/oracle-spring-boot-starter-json-collections/src/main/java/com/oracle/spring/json/jsonb/JSONB.java @@ -2,6 +2,7 @@ // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. package com.oracle.spring.json.jsonb; +import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; @@ -43,6 +44,12 @@ public JsonParser toJsonParser(Object o) { return oracleJsonFactory.createJsonBinaryParser(buf).wrap(JsonParser.class); } + public T fromOSON(byte[] oson, Class clazz) throws IOException { + try (ByteArrayInputStream inputStream = new ByteArrayInputStream(oson)) { + return fromOSON(inputStream, clazz); + } + } + public T fromOSON(JsonParser parser, Class clazz) { return jsonb.fromJson(parser, clazz); } diff --git a/database/starters/oracle-spring-boot-starter-json-collections/src/test/java/com/oracle/spring/json/jsonb/JSONBTest.java b/database/starters/oracle-spring-boot-starter-json-collections/src/test/java/com/oracle/spring/json/jsonb/JSONBTest.java index bc47e525..c076b6ce 100644 --- a/database/starters/oracle-spring-boot-starter-json-collections/src/test/java/com/oracle/spring/json/jsonb/JSONBTest.java +++ b/database/starters/oracle-spring-boot-starter-json-collections/src/test/java/com/oracle/spring/json/jsonb/JSONBTest.java @@ -3,6 +3,7 @@ package com.oracle.spring.json.jsonb; import java.io.ByteArrayInputStream; +import java.io.IOException; import java.io.InputStream; import java.nio.ByteBuffer; @@ -36,8 +37,7 @@ void toOSON() { void parserToObject() { JsonParser parser = jsonb.toJsonParser(s); Student student = jsonb.fromOSON(parser, Student.class); - assertThat(student).isNotNull(); - assertThat(student).isEqualTo(s); + validateStudent(student); } @Test @@ -46,16 +46,26 @@ void inputStreamToObject() { InputStream is = new ByteArrayInputStream(oson); Student student = jsonb.fromOSON(is, Student.class); - assertThat(student).isNotNull(); - assertThat(student).isEqualTo(s); + validateStudent(student); } @Test - void byteBufferToOjbect() { + void byteBufferToObject() { byte[] oson = jsonb.toOSON(s); ByteBuffer buf = ByteBuffer.wrap(oson); Student student = jsonb.fromOSON(buf, Student.class); + validateStudent(student); + } + + @Test + void byteArrayToObject() throws IOException { + byte[] oson = jsonb.toOSON(s); + Student student = jsonb.fromOSON(oson, Student.class); + validateStudent(student); + } + + void validateStudent(Student student) { assertThat(student).isNotNull(); assertThat(student).isEqualTo(s); }