From 6e52fa0b5dcaa2fa138f97b64211c5096bfc5081 Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Mon, 27 Jan 2025 22:14:44 +0100 Subject: [PATCH] made BaseDocument and BaseEdgeDocument serializable (#596) --- .../arangodb/entity/AbstractBaseDocument.java | 5 +++- .../serialization-config.json | 12 +++++++++ .../serialization-config.json | 12 +++++++++ .../java/com/arangodb/SerializableTest.java | 26 +++++++++++++++++++ 4 files changed, 54 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/arangodb/entity/AbstractBaseDocument.java b/core/src/main/java/com/arangodb/entity/AbstractBaseDocument.java index 2bd5d4982..5019834c8 100644 --- a/core/src/main/java/com/arangodb/entity/AbstractBaseDocument.java +++ b/core/src/main/java/com/arangodb/entity/AbstractBaseDocument.java @@ -26,6 +26,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonInclude; +import java.io.Serializable; import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -35,7 +36,9 @@ * @author Mark Vollmary * @author Michele Rastelli */ -abstract class AbstractBaseDocument { +abstract class AbstractBaseDocument implements Serializable { + + private static final long serialVersionUID = 6985324876843525239L; private static final String[] META_PROPS = new String[]{ DocumentFields.ID, diff --git a/driver/src/main/resources/META-INF/native-image/com.arangodb/arangodb-java-driver/serialization-config.json b/driver/src/main/resources/META-INF/native-image/com.arangodb/arangodb-java-driver/serialization-config.json index 7160b9bd4..e5d77727d 100644 --- a/driver/src/main/resources/META-INF/native-image/com.arangodb/arangodb-java-driver/serialization-config.json +++ b/driver/src/main/resources/META-INF/native-image/com.arangodb/arangodb-java-driver/serialization-config.json @@ -10,5 +10,17 @@ }, { "name": "com.arangodb.internal.net.ArangoDBRedirectException" + }, + { + "name": "com.arangodb.entity.AbstractBaseDocument" + }, + { + "name": "com.arangodb.entity.BaseDocument" + }, + { + "name": "com.arangodb.entity.BaseEdgeDocument" + }, + { + "name": "java.util.HashMap" } ] diff --git a/shaded/src/main/resources/META-INF/native-image/com.arangodb/arangodb-java-driver-shaded/serialization-config.json b/shaded/src/main/resources/META-INF/native-image/com.arangodb/arangodb-java-driver-shaded/serialization-config.json index 7160b9bd4..e5d77727d 100644 --- a/shaded/src/main/resources/META-INF/native-image/com.arangodb/arangodb-java-driver-shaded/serialization-config.json +++ b/shaded/src/main/resources/META-INF/native-image/com.arangodb/arangodb-java-driver-shaded/serialization-config.json @@ -10,5 +10,17 @@ }, { "name": "com.arangodb.internal.net.ArangoDBRedirectException" + }, + { + "name": "com.arangodb.entity.AbstractBaseDocument" + }, + { + "name": "com.arangodb.entity.BaseDocument" + }, + { + "name": "com.arangodb.entity.BaseEdgeDocument" + }, + { + "name": "java.util.HashMap" } ] diff --git a/test-functional/src/test/java/com/arangodb/SerializableTest.java b/test-functional/src/test/java/com/arangodb/SerializableTest.java index 17b1ec1da..a915a74aa 100644 --- a/test-functional/src/test/java/com/arangodb/SerializableTest.java +++ b/test-functional/src/test/java/com/arangodb/SerializableTest.java @@ -1,5 +1,7 @@ package com.arangodb; +import com.arangodb.entity.BaseDocument; +import com.arangodb.entity.BaseEdgeDocument; import com.arangodb.entity.ErrorEntity; import com.arangodb.internal.net.ArangoDBRedirectException; import com.fasterxml.jackson.databind.JsonNode; @@ -50,6 +52,30 @@ void serializeArangoDBMultipleException() throws IOException, ClassNotFoundExcep assertThat(e2.getExceptions().iterator().next().getMessage()).isEqualTo("foo"); } + @Test + void serializeBaseDocument() throws IOException, ClassNotFoundException { + BaseDocument doc = new BaseDocument(); + doc.setKey("test"); + doc.setId("id"); + doc.setRevision("revision"); + doc.addAttribute("foo", "bar"); + BaseDocument doc2 = roundTrip(doc); + assertThat(doc2).isEqualTo(doc); + } + + @Test + void serializeBaseEdgeDocument() throws IOException, ClassNotFoundException { + BaseEdgeDocument doc = new BaseEdgeDocument(); + doc.setKey("test"); + doc.setId("id"); + doc.setRevision("revision"); + doc.setFrom("from"); + doc.setTo("to"); + doc.addAttribute("foo", "bar"); + BaseDocument doc2 = roundTrip(doc); + assertThat(doc2).isEqualTo(doc); + } + private T roundTrip(T input) throws IOException, ClassNotFoundException { ByteArrayOutputStream os = new ByteArrayOutputStream(); ObjectOutputStream objectOutputStream = new ObjectOutputStream(os);