Skip to content

Commit fffb788

Browse files
authored
Merge pull request #59 from oracle/jackson-data-bind
Add Jackson data-bind examples
2 parents deeacca + 2b1ee0b commit fffb788

File tree

15 files changed

+392
-215
lines changed

15 files changed

+392
-215
lines changed
Lines changed: 75 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,78 @@
1-
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
2-
<modelVersion>4.0.0</modelVersion>
3-
<groupId>com.oracle.database.jdbc.example</groupId>
4-
<artifactId>SpringDataJdbc</artifactId>
5-
<version>0.0.1-SNAPSHOT</version>
6-
<parent>
7-
<groupId>org.springframework.boot</groupId>
8-
<artifactId>spring-boot-starter-parent</artifactId>
9-
<version>3.1.0</version>
10-
<relativePath/> <!-- lookup parent from repository -->
11-
</parent>
12-
13-
<properties>
14-
<java.version>17</java.version>
15-
</properties>
16-
17-
<dependencies>
18-
19-
<dependency>
20-
<groupId>org.springframework.boot</groupId>
21-
<artifactId>spring-boot-starter-data-jdbc</artifactId>
22-
</dependency>
1+
<project xmlns="http://maven.apache.org/POM/4.0.0"
2+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
<groupId>com.oracle.database.jdbc.example</groupId>
6+
<artifactId>SpringDataJdbc</artifactId>
7+
<version>0.0.1-SNAPSHOT</version>
8+
<parent>
9+
<groupId>org.springframework.boot</groupId>
10+
<artifactId>spring-boot-starter-parent</artifactId>
11+
<version>3.4.2</version>
12+
<relativePath /> <!-- lookup parent from repository -->
13+
</parent>
2314

15+
<properties>
16+
<java.version>21</java.version>
17+
</properties>
2418

25-
<dependency>
26-
<groupId>org.projectlombok</groupId>
27-
<artifactId>lombok</artifactId>
28-
<optional>true</optional>
29-
</dependency>
30-
<dependency>
31-
<groupId>com.oracle.database.jdbc</groupId>
32-
<artifactId>ojdbc11</artifactId>
33-
<version>23.2.0.0</version>
34-
</dependency>
35-
<dependency>
36-
<groupId>com.oracle.database.jdbc</groupId>
37-
<artifactId>ucp11</artifactId>
38-
<version>23.2.0.0</version>
39-
</dependency>
40-
<dependency>
41-
<groupId>org.springframework.boot</groupId>
42-
<artifactId>spring-boot-starter-test</artifactId>
43-
</dependency>
44-
<!-- https://mvnrepository.com/artifact/com.oracle.jdbc/ons -->
45-
<dependency>
46-
<groupId>jakarta.json</groupId>
47-
<artifactId>jakarta.json-api</artifactId>
48-
</dependency>
49-
<dependency>
50-
<groupId>jakarta.json.bind</groupId>
51-
<artifactId>jakarta.json.bind-api</artifactId>
52-
</dependency>
53-
<dependency>
54-
<groupId>org.glassfish</groupId>
55-
<artifactId>jakarta.json</artifactId>
56-
<version>1.1.6</version>
57-
</dependency>
58-
<dependency>
59-
<groupId>org.eclipse</groupId>
60-
<artifactId>yasson</artifactId>
61-
</dependency>
62-
</dependencies>
19+
<dependencies>
20+
<dependency>
21+
<groupId>org.springframework.boot</groupId>
22+
<artifactId>spring-boot-starter-data-jdbc</artifactId>
23+
</dependency>
24+
<dependency>
25+
<groupId>org.projectlombok</groupId>
26+
<artifactId>lombok</artifactId>
27+
<optional>true</optional>
28+
</dependency>
29+
<dependency>
30+
<groupId>com.oracle.database.jdbc</groupId>
31+
<artifactId>ojdbc11</artifactId>
32+
</dependency>
33+
<dependency>
34+
<groupId>com.oracle.database.jdbc</groupId>
35+
<artifactId>ucp11</artifactId>
36+
</dependency>
37+
<dependency>
38+
<groupId>org.springframework.boot</groupId>
39+
<artifactId>spring-boot-starter-test</artifactId>
40+
</dependency>
41+
<!-- https://mvnrepository.com/artifact/com.oracle.jdbc/ons -->
42+
<dependency>
43+
<groupId>jakarta.json</groupId>
44+
<artifactId>jakarta.json-api</artifactId>
45+
</dependency>
46+
<dependency>
47+
<groupId>jakarta.json.bind</groupId>
48+
<artifactId>jakarta.json.bind-api</artifactId>
49+
</dependency>
50+
<dependency>
51+
<groupId>org.glassfish</groupId>
52+
<artifactId>jakarta.json</artifactId>
53+
<version>1.1.6</version>
54+
</dependency>
55+
<dependency>
56+
<groupId>org.eclipse</groupId>
57+
<artifactId>yasson</artifactId>
58+
</dependency>
59+
<dependency>
60+
<groupId>com.oracle.database.jdbc</groupId>
61+
<artifactId>ojdbc-provider-jackson-oson</artifactId>
62+
<version>1.0.3</version>
63+
</dependency>
64+
<dependency>
65+
<groupId>com.oracle.database.jdbc</groupId>
66+
<artifactId>ojdbc-provider-common</artifactId>
67+
<version>1.0.3</version>
68+
</dependency>
69+
<dependency>
70+
<groupId>com.fasterxml.jackson.datatype</groupId>
71+
<artifactId>jackson-datatype-jsr310</artifactId>
72+
</dependency>
73+
<dependency>
74+
<groupId>com.fasterxml.jackson.core</groupId>
75+
<artifactId>jackson-core</artifactId>
76+
</dependency>
77+
</dependencies>
6378
</project>
Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
package movie.springjdbc;
22

33
import java.io.ByteArrayOutputStream;
4-
import java.nio.ByteBuffer;
4+
import java.io.IOException;
55
import java.sql.SQLException;
66
import java.util.List;
77

88
import javax.sql.DataSource;
99

10-
import org.eclipse.yasson.YassonJsonb;
1110
import org.springframework.context.annotation.Bean;
1211
import org.springframework.context.annotation.Configuration;
1312
import org.springframework.core.convert.converter.Converter;
@@ -16,21 +15,19 @@
1615
import org.springframework.data.jdbc.core.convert.JdbcCustomConversions;
1716
import org.springframework.data.jdbc.repository.config.AbstractJdbcConfiguration;
1817

19-
import jakarta.json.bind.Jsonb;
20-
import jakarta.json.bind.JsonbBuilder;
21-
import jakarta.json.stream.JsonGenerator;
22-
import jakarta.json.stream.JsonParser;
18+
import com.fasterxml.jackson.databind.ObjectMapper;
19+
2320
import movie.springjdbc.model.MovieDetails;
24-
import oracle.sql.json.OracleJsonFactory;
25-
import oracle.sql.json.OracleJsonGenerator;
21+
import oracle.jdbc.provider.oson.JacksonOsonConverter;
22+
import oracle.jdbc.provider.oson.OsonFactory;
23+
import oracle.jdbc.provider.oson.OsonGenerator;
24+
import oracle.sql.json.OracleJsonDatum;
2625
import oracle.ucp.jdbc.PoolDataSource;
2726
import oracle.ucp.jdbc.PoolDataSourceFactory;
2827

2928
@Configuration
3029
public class Config extends AbstractJdbcConfiguration {
3130

32-
private static OracleJsonFactory FACTORY = new OracleJsonFactory();
33-
3431
@Bean
3532
DataSource dataSource() throws SQLException {
3633
PoolDataSource dataSource = PoolDataSourceFactory.getPoolDataSource();
@@ -39,10 +36,10 @@ DataSource dataSource() throws SQLException {
3936
dataSource.setInitialPoolSize(5);
4037
dataSource.setMinPoolSize(5);
4138
dataSource.setMaxPoolSize(10);
42-
dataSource.setConnectionProperty("oracle.jdbc.jsonDefaultGetObjectType","jakarta.json.stream.JsonParser");
39+
dataSource.setConnectionProperty("oracle.jdbc.jsonDefaultGetObjectType","oracle.sql.json.OracleJsonDatum");
4340
return dataSource;
4441
}
45-
42+
4643
@Override
4744
@Bean
4845
public JdbcCustomConversions jdbcCustomConversions() {
@@ -55,27 +52,34 @@ public JdbcCustomConversions jdbcCustomConversions() {
5552
}
5653

5754
@ReadingConverter
58-
private static class MovieDetailsReader implements Converter<JsonParser, MovieDetails> {
55+
private static class MovieDetailsReader implements Converter<OracleJsonDatum, MovieDetails> {
5956
@Override
60-
public MovieDetails convert(JsonParser source) {
61-
Jsonb jsonb = JsonbBuilder.create();
62-
return ((YassonJsonb)jsonb).fromJson(source, MovieDetails.class);
57+
public MovieDetails convert(OracleJsonDatum source) {
58+
ObjectMapper mapper = JacksonOsonConverter.getObjectMapper();
59+
try {
60+
return mapper.readValue(source.shareBytes(), MovieDetails.class);
61+
} catch (IOException e) {
62+
throw new IllegalArgumentException(e);
63+
}
6364
}
6465
}
6566

6667
@WritingConverter
67-
private static class MovieDetailsWriter implements Converter<MovieDetails, JsonParser> {
68-
OracleJsonFactory factory = new OracleJsonFactory();
69-
68+
private static class MovieDetailsWriter implements Converter<MovieDetails, OracleJsonDatum> {
7069
@Override
71-
public JsonParser convert(MovieDetails source) {
72-
Jsonb jsonb = JsonbBuilder.create();
73-
ByteArrayOutputStream baos = new ByteArrayOutputStream();
74-
OracleJsonGenerator gen = factory.createJsonBinaryGenerator(baos);
75-
((YassonJsonb)jsonb).toJson(source, gen.wrap(JsonGenerator.class));
76-
gen.close();
77-
return FACTORY.createJsonBinaryParser(ByteBuffer.wrap(baos.toByteArray())).wrap(JsonParser.class);
70+
public OracleJsonDatum convert(MovieDetails source) {
71+
ObjectMapper mapper = JacksonOsonConverter.getObjectMapper();
72+
OsonFactory factory = (OsonFactory) mapper.getFactory();
73+
try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
74+
try (OsonGenerator osonGen = (OsonGenerator) factory.createGenerator(out)) {
75+
mapper.writeValue(osonGen, source);
76+
}
77+
return new OracleJsonDatum(out.toByteArray());
78+
} catch (IOException e) {
79+
throw new IllegalArgumentException(e);
80+
}
7881
}
7982
}
8083

84+
8185
}

JdbcExamples/SpringDataJdbc/src/main/java/movie/springjdbc/model/MovieDetails.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import java.util.List;
44
import java.util.Set;
55

6-
import lombok.Builder;
76
import lombok.Data;
87

98
@Data

JdbcExamples/data/matrix.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name":"Matrix",
2+
"name":"The Matrix",
33
"genre": "Sci-fi",
44
"gross" : 463517383
55
}

JdbcExamples/pom.xml

Lines changed: 50 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
1+
<project xmlns="http://maven.apache.org/POM/4.0.0"
2+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
23
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
34
<modelVersion>4.0.0</modelVersion>
45

@@ -11,35 +12,35 @@
1112
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
1213
</properties>
1314
<build>
14-
<plugins>
15-
<plugin>
15+
<plugins>
16+
<plugin>
1617
<groupId>org.apache.maven.plugins</groupId>
1718
<artifactId>maven-compiler-plugin</artifactId>
1819
<version>2.4</version>
1920
<configuration>
20-
<source>17</source>
21-
<target>17</target>
21+
<source>21</source>
22+
<target>21</target>
2223
</configuration>
23-
</plugin>
24+
</plugin>
2425

25-
<plugin>
26-
<groupId>org.codehaus.mojo</groupId>
27-
<artifactId>exec-maven-plugin</artifactId>
28-
<version>1.6.0</version>
29-
<executions>
30-
<execution>
31-
<goals>
32-
<goal>java</goal>
33-
</goals>
34-
</execution>
35-
</executions>
36-
<configuration>
37-
<cleanupDaemonThreads>false</cleanupDaemonThreads>
38-
<classpathScope>runtime</classpathScope>
39-
</configuration>
40-
</plugin>
26+
<plugin>
27+
<groupId>org.codehaus.mojo</groupId>
28+
<artifactId>exec-maven-plugin</artifactId>
29+
<version>1.6.0</version>
30+
<executions>
31+
<execution>
32+
<goals>
33+
<goal>java</goal>
34+
</goals>
35+
</execution>
36+
</executions>
37+
<configuration>
38+
<cleanupDaemonThreads>false</cleanupDaemonThreads>
39+
<classpathScope>runtime</classpathScope>
40+
</configuration>
41+
</plugin>
4142

42-
</plugins>
43+
</plugins>
4344
</build>
4445
<dependencies>
4546
<dependency>
@@ -49,14 +50,14 @@
4950
<scope>test</scope>
5051
</dependency>
5152
<dependency>
52-
<groupId>com.oracle.database.jdbc</groupId>
53-
<artifactId>ojdbc11</artifactId>
54-
<version>23.2.0.0</version>
53+
<groupId>com.oracle.database.jdbc</groupId>
54+
<artifactId>ojdbc17</artifactId>
55+
<version>23.7.0.25.01</version>
5556
</dependency>
5657
<dependency>
57-
<groupId>com.oracle.database.jdbc</groupId>
58-
<artifactId>ucp11</artifactId>
59-
<version>23.2.0.0</version>
58+
<groupId>com.oracle.database.jdbc</groupId>
59+
<artifactId>ucp11</artifactId>
60+
<version>23.7.0.25.01</version>
6061
</dependency>
6162
<dependency>
6263
<groupId>jakarta.json.bind</groupId>
@@ -78,15 +79,30 @@
7879
<artifactId>yasson</artifactId>
7980
<version>3.0.3</version>
8081
</dependency>
82+
<dependency>
83+
<groupId>com.google.code.gson</groupId>
84+
<artifactId>gson</artifactId>
85+
<version>2.8.9</version>
86+
</dependency>
87+
<dependency>
88+
<groupId>com.oracle.database.jdbc</groupId>
89+
<artifactId>ojdbc-provider-jackson-oson</artifactId>
90+
<version>1.0.3</version>
91+
</dependency>
92+
<dependency>
93+
<groupId>com.oracle.database.jdbc</groupId>
94+
<artifactId>ojdbc-provider-common</artifactId>
95+
<version>1.0.3</version>
96+
</dependency>
8197
<dependency>
8298
<groupId>com.fasterxml.jackson.core</groupId>
8399
<artifactId>jackson-core</artifactId>
84-
<version>2.11.0</version>
100+
<version>2.18.1</version>
85101
</dependency>
86102
<dependency>
87-
<groupId>com.google.code.gson</groupId>
88-
<artifactId>gson</artifactId>
89-
<version>2.8.9</version>
90-
</dependency>
103+
<groupId>com.fasterxml.jackson.datatype</groupId>
104+
<artifactId>jackson-datatype-jsr310</artifactId>
105+
<version>2.18.1</version>
106+
</dependency>
91107
</dependencies>
92108
</project>

0 commit comments

Comments
 (0)