You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ke...@apache.org on 2024/10/29 19:55:12 UTC
(tinkerpop) branch master-http updated: Update BulkSet GraphSONv4 serialization. (#2861)
This is an automated email from the ASF dual-hosted git repository.
kenhuuu pushed a commit to branch master-http
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
The following commit(s) were added to refs/heads/master-http by this push:
new baa7dcca43 Update BulkSet GraphSONv4 serialization. (#2861)
baa7dcca43 is described below
commit baa7dcca43a53b9efdb60615745f8cd174061367
Author: kenhuuu <10...@users.noreply.github.com>
AuthorDate: Tue Oct 29 12:55:04 2024 -0700
Update BulkSet GraphSONv4 serialization. (#2861)
---
docs/src/dev/io/graphson.asciidoc | 24 ++++++++++++++++-
.../structure/io/graphson/GraphSONModule.java | 6 +++--
.../io/graphson/TraversalSerializersV4.java | 31 ++--------------------
.../graphson/GraphSONMapperEmbeddedTypeTest.java | 7 ++---
.../structure/io/graphson/empty-bulklist-v4.json | 4 +++
.../structure/io/graphson/empty-bulkset-v4.json | 4 ---
.../structure/io/graphson/var-bulklist-v4.json | 4 +++
.../structure/io/graphson/var-bulkset-v4.json | 10 -------
.../io/AbstractTypedCompatibilityTest.java | 2 --
9 files changed, 41 insertions(+), 51 deletions(-)
diff --git a/docs/src/dev/io/graphson.asciidoc b/docs/src/dev/io/graphson.asciidoc
index 8d70cd2509..cede81a2da 100644
--- a/docs/src/dev/io/graphson.asciidoc
+++ b/docs/src/dev/io/graphson.asciidoc
@@ -2615,7 +2615,7 @@ The untyped version has one additional required key "type" which is always "vert
==== VertexProperty
-JOSN Object with required keys: "id", "value", "label", "properties" +
+JSON Object with required keys: "id", "value", "label", "properties" +
"id" is any type GraphSON 4.0 type +
"value" is any type GraphSON 4.0 type +
"label" is a `g:List` of `String` +
@@ -2651,6 +2651,28 @@ JOSN Object with required keys: "id", "value", "label", "properties" +
=== Graph Process
+==== BulkSet
+
+JSON Array that contains the expanded entries of the BulkSet.
+Note: BulkSet is serialized to g:List so there is no BulkSet deserializer.
+
+[source,json]
+----
+{
+ "@type": "g:List",
+ "@value": [
+ "marko",
+ "josh",
+ "josh"
+ ]
+}
+----
+
+[source,json]
+----
+[ "marko", "josh", "josh" ]
+----
+
==== Direction
JSON String of the enum value.
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
index 904809360d..b19cbb4931 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
@@ -149,6 +149,10 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
put(Double.class, "Double");
put(Float.class, "Float");
+ // BulkSet is expanded to List during serialization but we want the List deserializer to be
+ // registered to g:List so this entry must be added before List.
+ put(BulkSet.class, "List");
+
put(Map.class, "Map");
put(List.class, "List");
put(Set.class, "Set");
@@ -165,7 +169,6 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
put(TraversalExplanation.class, "TraversalExplanation");
put(Traverser.class, "Traverser");
put(Tree.class, "Tree");
- put(BulkSet.class, "BulkSet");
put(AndP.class, "P");
put(OrP.class, "P");
put(P.class, "P");
@@ -299,7 +302,6 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
addDeserializer(Double.class, new GraphSONSerializersV4.DoubleJacksonDeserializer());
// traversal
- addDeserializer(BulkSet.class, new TraversalSerializersV4.BulkSetJacksonDeserializer());
Stream.of(VertexProperty.Cardinality.values(),
Column.values(),
Direction.values(),
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV4.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV4.java
index 041824525d..fec60d2aa8 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV4.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV4.java
@@ -152,9 +152,8 @@ final class TraversalSerializersV4 {
public void serialize(final BulkSet bulkSet, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
throws IOException {
jsonGenerator.writeStartArray();
- for (Map.Entry entry : (Set<Map.Entry>) bulkSet.asBulk().entrySet()) {
- jsonGenerator.writeObject(entry.getKey());
- jsonGenerator.writeObject(entry.getValue());
+ for (Object element : bulkSet) {
+ jsonGenerator.writeObject(element);
}
jsonGenerator.writeEndArray();
}
@@ -401,32 +400,6 @@ final class TraversalSerializersV4 {
}
}
- final static class BulkSetJacksonDeserializer extends StdDeserializer<BulkSet> {
- public BulkSetJacksonDeserializer() {
- super(BulkSet.class);
- }
-
- @Override
- public BulkSet deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
-
- final BulkSet<Object> bulkSet = new BulkSet<>();
-
- while (jsonParser.nextToken() != JsonToken.END_ARRAY) {
- final Object key = deserializationContext.readValue(jsonParser, Object.class);
- jsonParser.nextToken();
- final Long val = deserializationContext.readValue(jsonParser, Long.class);
- bulkSet.add(key, val);
- }
-
- return bulkSet;
- }
-
- @Override
- public boolean isCachable() {
- return true;
- }
- }
-
static class TraverserJacksonDeserializer extends StdDeserializer<Traverser> {
public TraverserJacksonDeserializer() {
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperEmbeddedTypeTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperEmbeddedTypeTest.java
index b6ae2dc189..94086371dc 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperEmbeddedTypeTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperEmbeddedTypeTest.java
@@ -119,15 +119,16 @@ public class GraphSONMapperEmbeddedTypeTest extends AbstractGraphSONTest {
@Test
public void shouldHandleBulkSet() throws Exception {
- // only supported on V3/V4
- assumeThat(version, not(anyOf(startsWith("v1"), startsWith("v2"))));
+ // only supported on V4
+ assumeThat(version, not(anyOf(startsWith("v1"), startsWith("v2"), startsWith("v3"))));
final BulkSet<String> bs = new BulkSet<>();
bs.add("test1", 1);
bs.add("test2", 2);
bs.add("test3", 3);
- assertEquals(bs, serializeDeserialize(mapper, bs, BulkSet.class));
+ final List<String> expandedBs = new ArrayList<>(bs);
+ assertEquals(expandedBs, serializeDeserializeAuto(mapper, bs));
}
@Test
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/empty-bulklist-v4.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/empty-bulklist-v4.json
new file mode 100644
index 0000000000..aacbd803fb
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/empty-bulklist-v4.json
@@ -0,0 +1,4 @@
+{
+ "@type" : "g:List",
+ "@value" : [ ]
+}
\ No newline at end of file
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/empty-bulkset-v4.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/empty-bulkset-v4.json
deleted file mode 100644
index f9fb4a5eed..0000000000
--- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/empty-bulkset-v4.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "@type" : "g:BulkSet",
- "@value" : [ ]
-}
\ No newline at end of file
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/var-bulklist-v4.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/var-bulklist-v4.json
new file mode 100644
index 0000000000..ac763480b2
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/var-bulklist-v4.json
@@ -0,0 +1,4 @@
+{
+ "@type" : "g:List",
+ "@value" : [ "marko", "josh", "josh" ]
+}
\ No newline at end of file
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/var-bulkset-v4.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/var-bulkset-v4.json
deleted file mode 100644
index c216a36171..0000000000
--- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/var-bulkset-v4.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "@type" : "g:BulkSet",
- "@value" : [ "marko", {
- "@type" : "g:Int64",
- "@value" : 1
- }, "josh", {
- "@type" : "g:Int64",
- "@value" : 2
- } ]
-}
\ No newline at end of file
diff --git a/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/structure/io/AbstractTypedCompatibilityTest.java b/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/structure/io/AbstractTypedCompatibilityTest.java
index 3b7bdf9093..bd8dee9cb4 100644
--- a/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/structure/io/AbstractTypedCompatibilityTest.java
+++ b/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/structure/io/AbstractTypedCompatibilityTest.java
@@ -882,7 +882,6 @@ public abstract class AbstractTypedCompatibilityTest extends AbstractCompatibili
}
@Test
- @Ignore("re-enable after GraphSONV4 bulklist is implemented")
public void shouldReadWriteVarBulkList() throws Exception {
final String resourceName = "var-bulklist";
@@ -898,7 +897,6 @@ public abstract class AbstractTypedCompatibilityTest extends AbstractCompatibili
}
@Test
- @Ignore("re-enable after GraphSONV4 bulklist is implemented")
public void shouldReadWriteEmptyBulkList() throws Exception {
final String resourceName = "empty-bulklist";