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..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 @@ -1,12 +1,14 @@ -// 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; +import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; 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 +18,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; @@ -38,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 8ea98488..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 @@ -1,8 +1,9 @@ -// 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; import java.io.ByteArrayInputStream; +import java.io.IOException; import java.io.InputStream; import java.nio.ByteBuffer; @@ -18,7 +19,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, @@ -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); }