Skip to content

Commit 1b6066a

Browse files
authored
[DE-968] Support JSON-P types (#593)
1 parent 738b9f5 commit 1b6066a

16 files changed

+106
-11
lines changed

Diff for: core/pom.xml

+5
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@
4141
<artifactId>jackson-annotations</artifactId>
4242
<scope>compile</scope>
4343
</dependency>
44+
<dependency>
45+
<groupId>com.fasterxml.jackson.datatype</groupId>
46+
<artifactId>jackson-datatype-jakarta-jsonp</artifactId>
47+
<scope>compile</scope>
48+
</dependency>
4449
<dependency>
4550
<groupId>com.google.code.findbugs</groupId>
4651
<artifactId>jsr305</artifactId>

Diff for: core/src/main/java/com/arangodb/internal/serde/InternalSerde.java

-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.arangodb.arch.UsedInApi;
44
import com.arangodb.serde.ArangoSerde;
55
import com.arangodb.ContentType;
6-
import com.fasterxml.jackson.core.JsonParser;
76
import com.fasterxml.jackson.databind.JavaType;
87
import com.fasterxml.jackson.databind.JsonNode;
98

Diff for: core/src/main/java/com/arangodb/internal/serde/InternalSerdeImpl.java

+12
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@
1717
import com.fasterxml.jackson.databind.JsonNode;
1818
import com.fasterxml.jackson.databind.Module;
1919
import com.fasterxml.jackson.databind.ObjectMapper;
20+
import com.fasterxml.jackson.datatype.jsonp.JSONPModule;
21+
import jakarta.json.JsonException;
22+
import org.slf4j.Logger;
23+
import org.slf4j.LoggerFactory;
2024

2125
import java.io.ByteArrayOutputStream;
2226
import java.io.IOException;
@@ -27,6 +31,7 @@
2731
import static com.arangodb.internal.serde.SerdeUtils.extractBytes;
2832

2933
final class InternalSerdeImpl implements InternalSerde {
34+
private static final Logger LOG = LoggerFactory.getLogger(InternalSerdeImpl.class);
3035

3136
static {
3237
checkSupportedJacksonVersion();
@@ -50,6 +55,13 @@ final class InternalSerdeImpl implements InternalSerde {
5055
new UserDataSerializer(this),
5156
new UserDataDeserializer(this)
5257
));
58+
59+
// JSON-P datatypes
60+
try {
61+
mapper.registerModule(new JSONPModule());
62+
} catch (JsonException e) {
63+
LOG.debug("Jakarta JSON-P provider not found, handling of JSON-P datatypes is disabled", e);
64+
}
5365
}
5466

5567
@Override

Diff for: core/src/main/java/com/arangodb/internal/serde/SerdeUtils.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.fasterxml.jackson.databind.JsonNode;
1414
import com.fasterxml.jackson.databind.ObjectMapper;
1515
import com.fasterxml.jackson.databind.type.TypeFactory;
16+
import jakarta.json.JsonValue;
1617
import org.slf4j.Logger;
1718
import org.slf4j.LoggerFactory;
1819

@@ -127,7 +128,8 @@ public static byte[] extractBytes(JsonParser parser) throws IOException {
127128
}
128129

129130
public static boolean isManagedClass(Class<?> clazz) {
130-
return JsonNode.class.isAssignableFrom(clazz) ||
131+
return JsonNode.class.isAssignableFrom(clazz) || // jackson datatypes
132+
JsonValue.class.isAssignableFrom(clazz) || // JSON-B datatypes
131133
RawJson.class.equals(clazz) ||
132134
RawBytes.class.equals(clazz) ||
133135
BaseDocument.class.equals(clazz) ||

Diff for: pom.xml

+6
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,11 @@
107107
<artifactId>slf4j-api</artifactId>
108108
<version>2.0.9</version>
109109
</dependency>
110+
<dependency>
111+
<groupId>jakarta.json</groupId>
112+
<artifactId>jakarta.json-api</artifactId>
113+
<version>2.1.3</version>
114+
</dependency>
110115
<dependency>
111116
<groupId>com.arangodb</groupId>
112117
<artifactId>arangodb-java-driver</artifactId>
@@ -186,6 +191,7 @@
186191
<scopes>compile</scopes>
187192
<maxJdkVersion>1.8</maxJdkVersion>
188193
<excludes>
194+
<exclude>jakarta.json:jakarta.json-api</exclude>
189195
<exclude>jakarta.json.bind:jakarta.json.bind-api</exclude>
190196
</excludes>
191197
</enforceBytecodeVersion>

Diff for: shaded/pom.xml

+6
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@
4747
<artifactId>slf4j-api</artifactId>
4848
<scope>compile</scope>
4949
</dependency>
50+
<dependency>
51+
<groupId>jakarta.json</groupId>
52+
<artifactId>jakarta.json-api</artifactId>
53+
<scope>compile</scope>
54+
</dependency>
5055
<dependency>
5156
<!-- build arangodb-java-driver before so that we can use the javadoc artifact -->
5257
<groupId>com.arangodb</groupId>
@@ -82,6 +87,7 @@
8287
<artifactSet>
8388
<excludes>
8489
<exclude>org.slf4j:slf4j-api</exclude>
90+
<exclude>jakarta.json:jakarta.json-api</exclude>
8591
</excludes>
8692
</artifactSet>
8793
<relocations>

Diff for: test-functional/pom.xml

+24-3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,15 @@
1717
<maven.deploy.skip>true</maven.deploy.skip>
1818
</properties>
1919

20+
<dependencies>
21+
<dependency>
22+
<groupId>org.eclipse.parsson</groupId>
23+
<artifactId>parsson</artifactId>
24+
<version>1.1.7</version>
25+
<scope>test</scope>
26+
</dependency>
27+
</dependencies>
28+
2029
<profiles>
2130
<profile>
2231
<id>shaded</id>
@@ -34,11 +43,11 @@
3443
<configuration>
3544
<filesToExclude>
3645
**/CustomSerdeTest.**,
37-
**/SerdeTest.**,
38-
**/SerializableTest.**,
46+
**/CustomSerdeAsyncTest.**,
3947
**/JacksonInterferenceTest.**,
4048
**/JacksonRequestContextTest.**,
41-
**/HttpProxyTest.**
49+
**/HttpProxyTest.**,
50+
**/RequestContextTest.**
4251
</filesToExclude>
4352
<replacements>
4453
<replacement>
@@ -49,6 +58,18 @@
4958
<token>com.fasterxml.jackson.databind.ObjectNode</token>
5059
<value>com.arangodb.shaded.fasterxml.jackson.databind.ObjectNode</value>
5160
</replacement>
61+
<replacement>
62+
<token>com.fasterxml.jackson.databind.node</token>
63+
<value>com.arangodb.shaded.fasterxml.jackson.databind.node</value>
64+
</replacement>
65+
<replacement>
66+
<token>com.fasterxml.jackson.databind.ObjectMapper</token>
67+
<value>com.arangodb.shaded.fasterxml.jackson.databind.ObjectMapper</value>
68+
</replacement>
69+
<replacement>
70+
<token>com.fasterxml.jackson.core.JsonProcessingException</token>
71+
<value>com.arangodb.shaded.fasterxml.jackson.core.JsonProcessingException</value>
72+
</replacement>
5273
</replacements>
5374
</configuration>
5475
</plugin>

Diff for: test-functional/src/test-ssl/java/com/arangodb/HttpProxyTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636

3737

3838
/**
39-
* @author Michele Rastelli
39+
* NB: excluded from shaded tests
4040
*/
4141
class HttpProxyTest extends BaseTest {
4242

Diff for: test-functional/src/test/java/com/arangodb/BaseJunit5.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ static ArangoDatabase initDB(String name) {
101101
return database;
102102
}
103103

104-
static ArangoDatabase initDB() {
104+
protected static ArangoDatabase initDB() {
105105
return initDB(TEST_DB);
106106
}
107107

Diff for: test-functional/src/test/java/com/arangodb/JacksonRequestContextTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
import static org.assertj.core.api.Assertions.assertThat;
4545

4646
/**
47-
* @author Michele Rastelli
47+
* NB: excluded from shaded tests
4848
*/
4949
class JacksonRequestContextTest {
5050

Diff for: test-functional/src/test/java/com/arangodb/RequestContextTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
import static org.assertj.core.api.Assertions.assertThat;
4444

4545
/**
46-
* @author Michele Rastelli
46+
* NB: excluded from shaded tests
4747
*/
4848
class RequestContextTest {
4949

Diff for: test-functional/src/test/java/com/arangodb/serde/CustomSerdeAsyncTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050

5151

5252
/**
53-
* @author Michele Rastelli
53+
* NB: excluded from shaded tests
5454
*/
5555
class CustomSerdeAsyncTest {
5656

Diff for: test-functional/src/test/java/com/arangodb/serde/CustomSerdeTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949

5050

5151
/**
52-
* @author Michele Rastelli
52+
* NB: excluded from shaded tests
5353
*/
5454
class CustomSerdeTest {
5555

Diff for: test-functional/src/test/java/com/arangodb/serde/JacksonInterferenceTest.java

+3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616

1717
import static org.assertj.core.api.Assertions.assertThat;
1818

19+
/**
20+
* NB: excluded from shaded tests
21+
*/
1922
class JacksonInterferenceTest {
2023

2124
private final ObjectMapper mapper = new ObjectMapper();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.arangodb.serde;
2+
3+
import com.arangodb.ArangoDatabase;
4+
import com.arangodb.BaseJunit5;
5+
import jakarta.json.Json;
6+
import jakarta.json.JsonObject;
7+
import jakarta.json.JsonString;
8+
import jakarta.json.JsonValue;
9+
import org.junit.jupiter.api.BeforeAll;
10+
import org.junit.jupiter.params.ParameterizedTest;
11+
import org.junit.jupiter.params.provider.MethodSource;
12+
13+
import java.util.Collections;
14+
15+
import static org.assertj.core.api.Assertions.assertThat;
16+
17+
public class JsonBTypesTest extends BaseJunit5 {
18+
19+
@BeforeAll
20+
static void init() {
21+
BaseJunit5.initDB();
22+
}
23+
24+
@ParameterizedTest
25+
@MethodSource("dbs")
26+
void jsonNode(ArangoDatabase db) {
27+
JsonObject doc = Json.createObjectBuilder()
28+
.add("foo", "bar")
29+
.build();
30+
JsonObject res = db.query("return @d", JsonObject.class, Collections.singletonMap("d", doc)).next();
31+
assertThat(res.size()).isEqualTo(1);
32+
assertThat(res.getString("foo")).isEqualTo("bar");
33+
JsonValue value = db.query("return @d.foo", JsonValue.class, Collections.singletonMap("d", doc)).next();
34+
assertThat(value)
35+
.isInstanceOf(JsonString.class)
36+
.extracting(v -> ((JsonString) v).getString())
37+
.isEqualTo("bar");
38+
}
39+
40+
}

Diff for: test-functional/src/test/resources/simplelogger.properties

+1
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@ org.slf4j.simpleLogger.showShortLogName=false
99
org.slf4j.simpleLogger.defaultLogLevel=info
1010
#org.slf4j.simpleLogger.log.com.arangodb.internal.serde.JacksonUtils=debug
1111
#org.slf4j.simpleLogger.log.com.arangodb.internal.net.Communication=debug
12+
#org.slf4j.simpleLogger.log.com.arangodb.internal.serde.InternalSerdeImpl=debug

0 commit comments

Comments
 (0)