You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2018/09/05 22:08:06 UTC
[1/2] tinkerpop git commit: TINKERPOP-2028: Register
GremlinServerModule to GraphSON message serializer
Repository: tinkerpop
Updated Branches:
refs/heads/master bcee71a93 -> d6677350b
TINKERPOP-2028: Register GremlinServerModule to GraphSON message serializer
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/66d6a865
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/66d6a865
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/66d6a865
Branch: refs/heads/master
Commit: 66d6a865be1da049918487bad3d493df43876063
Parents: c9fcc13
Author: Kevin Gallardo <ke...@datastax.com>
Authored: Tue Aug 28 15:34:30 2018 -0400
Committer: Kevin Gallardo <ke...@datastax.com>
Committed: Wed Sep 5 16:31:43 2018 -0400
----------------------------------------------------------------------
CHANGELOG.asciidoc | 1 +
.../structure/io/graphson/GraphSONMapper.java | 17 ++++++
.../AbstractGraphSONMessageSerializerV2d0.java | 11 ++--
.../GraphSONMessageSerializerGremlinV2d0.java | 26 ++++++++-
.../ser/GraphSONMessageSerializerV2d0.java | 26 ++++++++-
.../ser/GraphSONMessageSerializerV3d0.java | 30 +++++++++--
.../ser/GraphSONMessageSerializerV2d0Test.java | 55 +++++++++++++++++++-
.../ser/GraphSONMessageSerializerV3d0Test.java | 49 ++++++++++++++++-
8 files changed, 200 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/66d6a865/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index cbb4b21..5b6c65d 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -25,6 +25,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
This release also includes changes from <<release-3-3-3, 3.3.3>>.
+* GraphSON `MessageSerializer`s will automatically register the GremlinServerModule to a provided GraphSONMapper.
* Implemented `ShortestPathVertexProgram` and the `shortestPath()` step.
* `AbstractGraphProvider` uses `g.io()` for loading test data.
* Added the `io()` start step and `read()` and `write()` termination steps to the Gremlin language.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/66d6a865/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
index e8b83ce..b553271 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
@@ -161,6 +161,23 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
return new Builder();
}
+ /**
+ * Create a new Builder from a given {@link GraphSONMapper}.
+ *
+ * @return a new builder, with properties taken from the original mapper already applied.
+ */
+ public static Builder build(final GraphSONMapper mapper) {
+ Builder builder = build();
+
+ builder.customModules = mapper.customModules;
+ builder.version = mapper.version;
+ builder.loadCustomModules = mapper.loadCustomSerializers;
+ builder.normalize = mapper.normalize;
+ builder.typeInfo = mapper.typeInfo;
+
+ return builder;
+ }
+
public TypeInfo getTypeInfo() {
return this.typeInfo;
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/66d6a865/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV2d0.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV2d0.java
index 7ae17a3..fcd389a 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV2d0.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV2d0.java
@@ -54,18 +54,20 @@ public abstract class AbstractGraphSONMessageSerializerV2d0 extends AbstractMess
protected ObjectMapper mapper;
- protected final TypeReference<Map<String, Object>> mapTypeReference = new TypeReference<Map<String, Object>>() {
- };
-
public AbstractGraphSONMessageSerializerV2d0() {
final GraphSONMapper.Builder builder = configureBuilder(initBuilder(null));
mapper = builder.create().createMapper();
}
+ @Deprecated
public AbstractGraphSONMessageSerializerV2d0(final GraphSONMapper mapper) {
this.mapper = mapper.createMapper();
}
+ public AbstractGraphSONMessageSerializerV2d0(final GraphSONMapper.Builder mapperBuilder) {
+ this.mapper = configureBuilder(mapperBuilder).create().createMapper();
+ }
+
abstract byte[] obtainHeader();
abstract GraphSONMapper.Builder configureBuilder(final GraphSONMapper.Builder builder);
@@ -140,8 +142,7 @@ public abstract class AbstractGraphSONMessageSerializerV2d0 extends AbstractMess
private GraphSONMapper.Builder initBuilder(final GraphSONMapper.Builder builder) {
final GraphSONMapper.Builder b = null == builder ? GraphSONMapper.build() : builder;
- return b.addCustomModule(new AbstractGraphSONMessageSerializerV2d0.GremlinServerModule())
- .addCustomModule(GraphSONXModuleV2d0.build().create(false))
+ return b.addCustomModule(GraphSONXModuleV2d0.build().create(false))
.version(GraphSONVersion.V2_0);
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/66d6a865/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV2d0.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV2d0.java
index 9ae4798..d7db881 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV2d0.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV2d0.java
@@ -41,14 +41,38 @@ public final class GraphSONMessageSerializerGremlinV2d0 extends AbstractGraphSON
header = buffer.array();
}
+ /**
+ * Creates a default GraphSONMessageSerializerGremlin.
+ * <p>
+ * By default this will internally instantiate a {@link GraphSONMapper} and register
+ * a {@link GremlinServerModule} and {@link org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONXModuleV2d0} to the mapper.
+ *
+ * @see #GraphSONMessageSerializerGremlinV2d0(GraphSONMapper.Builder)
+ */
public GraphSONMessageSerializerGremlinV2d0() {
super();
}
+ /**
+ * Create a GraphSONMessageSerializer from a {@link GraphSONMapper}. Deprecated, use
+ * {@link #GraphSONMessageSerializerGremlinV2d0(GraphSONMapper.Builder)} instead.
+ */
+ @Deprecated
public GraphSONMessageSerializerGremlinV2d0(final GraphSONMapper mapper) {
super(mapper);
}
+ /**
+ * Create a GraphSONMessageSerializerGremlin with a provided {@link GraphSONMapper.Builder}.
+ * <p>
+ * Note that to make this mapper usable in the context of request messages and responses,
+ * this method will automatically register a {@link GremlinServerModule} to the provided
+ * mapper.
+ */
+ public GraphSONMessageSerializerGremlinV2d0(final GraphSONMapper.Builder mapperBuilder) {
+ super(mapperBuilder);
+ }
+
@Override
public String[] mimeTypesSupported() {
return new String[]{MIME_TYPE};
@@ -62,6 +86,6 @@ public final class GraphSONMessageSerializerGremlinV2d0 extends AbstractGraphSON
@Override
GraphSONMapper.Builder configureBuilder(final GraphSONMapper.Builder builder) {
// already set to 2.0 in AbstractGraphSONMessageSerializerV2d0
- return builder.typeInfo(TypeInfo.PARTIAL_TYPES);
+ return builder.typeInfo(TypeInfo.PARTIAL_TYPES).addCustomModule(new GremlinServerModule());
}
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/66d6a865/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0.java
index 251b5c1..2321485 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0.java
@@ -50,14 +50,38 @@ public final class GraphSONMessageSerializerV2d0 extends AbstractGraphSONMessage
header = buffer.array();
}
+ /**
+ * Creates a default GraphSONMessageSerializer.
+ *
+ * By default this will internally instantiate a {@link GraphSONMapper} and register
+ * a {@link GremlinServerModule} and {@link GraphSONXModuleV2d0} to the mapper.
+ *
+ * @see #GraphSONMessageSerializerV2d0(GraphSONMapper.Builder)
+ */
public GraphSONMessageSerializerV2d0() {
super();
}
+ /**
+ * Create a GraphSONMessageSerializer from a {@link GraphSONMapper}. Deprecated, use
+ * {@link #GraphSONMessageSerializerV2d0(GraphSONMapper.Builder)} instead.
+ */
+ @Deprecated
public GraphSONMessageSerializerV2d0(final GraphSONMapper mapper) {
super(mapper);
}
+ /**
+ * Create a GraphSONMessageSerializer with a provided {@link GraphSONMapper.Builder}.
+ *
+ * Note that to make this mapper usable in the context of request messages and responses,
+ * this method will automatically register a {@link GremlinServerModule} to the provided
+ * mapper.
+ */
+ public GraphSONMessageSerializerV2d0(final GraphSONMapper.Builder mapperBuilder) {
+ super(mapperBuilder);
+ }
+
@Override
public String[] mimeTypesSupported() {
return new String[]{MIME_TYPE};
@@ -66,7 +90,7 @@ public final class GraphSONMessageSerializerV2d0 extends AbstractGraphSONMessage
@Override
GraphSONMapper.Builder configureBuilder(final GraphSONMapper.Builder builder) {
// already set to 2.0 in AbstractGraphSONMessageSerializerV2d0
- return builder.typeInfo(TypeInfo.PARTIAL_TYPES);
+ return builder.typeInfo(TypeInfo.PARTIAL_TYPES).addCustomModule(new GremlinServerModule());
}
@Override
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/66d6a865/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV3d0.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV3d0.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV3d0.java
index 502a2ff..53668f4 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV3d0.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV3d0.java
@@ -20,16 +20,12 @@ package org.apache.tinkerpop.gremlin.driver.ser;
import org.apache.tinkerpop.gremlin.driver.message.RequestMessage;
import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
-import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode;
import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper;
import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONVersion;
-import org.apache.tinkerpop.gremlin.structure.io.graphson.TypeInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.nio.ByteBuffer;
-import java.util.Map;
-import java.util.UUID;
/**
* Serialize results to JSON with version 3.0.x schema and the extended module.
@@ -49,14 +45,38 @@ public final class GraphSONMessageSerializerV3d0 extends AbstractGraphSONMessage
header = buffer.array();
}
+ /**
+ * Creates a default GraphSONMessageSerializer.
+ * <p>
+ * By default this will internally instantiate a {@link GraphSONMapper} and register
+ * a {@link GremlinServerModule} and {@link org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONXModuleV3d0} to the mapper.
+ *
+ * @see #GraphSONMessageSerializerV3d0(GraphSONMapper.Builder)
+ */
public GraphSONMessageSerializerV3d0() {
super();
}
+ /**
+ * Create a GraphSONMessageSerializer from a {@link GraphSONMapper}. Deprecated, use
+ * {@link #GraphSONMessageSerializerV3d0(GraphSONMapper.Builder)} instead.
+ */
+ @Deprecated
public GraphSONMessageSerializerV3d0(final GraphSONMapper mapper) {
super(mapper);
}
+ /**
+ * Create a GraphSONMessageSerializer with a provided {@link GraphSONMapper.Builder}.
+ *
+ * Note that to make this mapper usable in the context of request messages and responses,
+ * this method will automatically register a {@link GremlinServerModule} to the provided
+ * mapper.
+ */
+ public GraphSONMessageSerializerV3d0(final GraphSONMapper.Builder mapperBuilder) {
+ super(mapperBuilder);
+ }
+
@Override
public String[] mimeTypesSupported() {
return new String[]{MIME_TYPE, "application/json"};
@@ -65,7 +85,7 @@ public final class GraphSONMessageSerializerV3d0 extends AbstractGraphSONMessage
@Override
GraphSONMapper.Builder configureBuilder(final GraphSONMapper.Builder builder) {
// override the 2.0 in AbstractGraphSONMessageSerializerV2d0
- return builder.version(GraphSONVersion.V3_0);
+ return builder.version(GraphSONVersion.V3_0).addCustomModule(new GremlinServerModule());
}
@Override
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/66d6a865/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0Test.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0Test.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0Test.java
index 0bdc08d..dc23179 100644
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0Test.java
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0Test.java
@@ -18,6 +18,11 @@
*/
package org.apache.tinkerpop.gremlin.driver.ser;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.buffer.UnpooledByteBufAllocator;
+import org.apache.log4j.Level;
+import org.apache.tinkerpop.gremlin.driver.MessageSerializer;
import org.apache.tinkerpop.gremlin.driver.message.RequestMessage;
import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode;
@@ -35,11 +40,13 @@ import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper;
import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTokens;
import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONVersion;
import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONWriter;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONXModuleV2d0;
import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory;
import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
import org.apache.tinkerpop.shaded.jackson.core.JsonGenerationException;
import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.databind.JsonMappingException;
import org.apache.tinkerpop.shaded.jackson.databind.JsonNode;
import org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
@@ -64,6 +71,7 @@ import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
/**
@@ -72,6 +80,7 @@ import static org.junit.Assert.fail;
*
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
+@SuppressWarnings("unchecked")
public class GraphSONMessageSerializerV2d0Test {
public static final GraphSONMessageSerializerV2d0 SERIALIZER = new GraphSONMessageSerializerV2d0();
@@ -79,6 +88,10 @@ public class GraphSONMessageSerializerV2d0Test {
.overrideRequestId(UUID.fromString("2D62161B-9544-4F39-AF44-62EC49F9A595")).create();
private static final ObjectMapper mapper = new ObjectMapper();
+ private final UUID requestId = UUID.fromString("6457272A-4018-4538-B9AE-08DD5DDC0AA1");
+ private final ResponseMessage.Builder responseMessageBuilder = ResponseMessage.build(requestId);
+ private final static ByteBufAllocator allocator = UnpooledByteBufAllocator.DEFAULT;
+
@Test
public void shouldConfigureIoRegistry() throws Exception {
final GraphSONMessageSerializerV1d0 serializer = new GraphSONMessageSerializerV1d0();
@@ -363,7 +376,6 @@ public class GraphSONMessageSerializerV2d0Test {
@Test
public void shouldDeserializeRequestNicelyWithArgs() throws Exception {
- final GraphSONMessageSerializerV2d0 serializer = new GraphSONMessageSerializerV2d0();
final UUID request = UUID.fromString("011CFEE9-F640-4844-AC93-034448AC0E80");
final RequestMessage m = SERIALIZER.deserializeRequest(String.format("{\"requestId\":\"%s\",\"op\":\"eval\",\"args\":{\"x\":\"y\"}}", request));
assertEquals(request, m.getRequestId());
@@ -540,6 +552,47 @@ public class GraphSONMessageSerializerV2d0Test {
assertEquals(responseMessage.getStatus().getMessage(), responseMessageRead.getStatus().getMessage());
}
+ @Test
+ public void shouldRegisterGremlinServerModuleAutomaticallyWithMapper() throws SerializationException {
+ GraphSONMapper.Builder builder = GraphSONMapper.build().addCustomModule(GraphSONXModuleV2d0.build().create(false));
+ GraphSONMessageSerializerV2d0 graphSONMessageSerializerV2d0 = new GraphSONMessageSerializerV2d0(builder);
+
+ ResponseMessage rm = convert("hello", graphSONMessageSerializerV2d0);
+ assertEquals(rm.getRequestId(), requestId);
+ assertEquals(rm.getResult().getData(), "hello");
+ }
+
+
+ @Test
+ @SuppressWarnings("deprecation")
+ public void shouldFailOnMessageSerializerWithMapperIfNoGremlinServerModule() {
+ org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(AbstractGraphSONMessageSerializerV2d0.class);
+ Level previousLevel = logger.getLevel();
+
+ // Disable temporarily logging for this test
+ logger.setLevel(Level.OFF);
+
+ GraphSONMapper.Builder builder = GraphSONMapper.build().addCustomModule(GraphSONXModuleV2d0.build().create(false));
+ GraphSONMessageSerializerV2d0 graphSONMessageSerializerV2d0 = new GraphSONMessageSerializerV2d0(builder.create());
+
+ try {
+ convert("hello", graphSONMessageSerializerV2d0);
+ fail("Serialization should have failed since no GremlinServerModule registered.");
+ } catch (SerializationException e) {
+ assertTrue(e.getMessage().contains("Could not find a type identifier for the class"));
+ assertTrue(e.getCause() instanceof JsonMappingException);
+ assertTrue(e.getCause().getCause() instanceof IllegalArgumentException);
+ }
+
+ // Put logger level back to its original value
+ logger.setLevel(previousLevel);
+ }
+
+ private ResponseMessage convert(final Object toSerialize, MessageSerializer serializer) throws SerializationException {
+ final ByteBuf bb = serializer.serializeResponseAsBinary(responseMessageBuilder.result(toSerialize).create(), allocator);
+ return serializer.deserializeResponse(bb);
+ }
+
private class FunObject {
private String val;
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/66d6a865/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV3d0Test.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV3d0Test.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV3d0Test.java
index 88dfcf0..00c5b2e 100644
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV3d0Test.java
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV3d0Test.java
@@ -21,6 +21,8 @@ package org.apache.tinkerpop.gremlin.driver.ser;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import io.netty.buffer.UnpooledByteBufAllocator;
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
import org.apache.tinkerpop.gremlin.driver.MessageSerializer;
import org.apache.tinkerpop.gremlin.driver.message.RequestMessage;
import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
@@ -32,9 +34,12 @@ import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.Property;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONXModuleV3d0;
import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory;
import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+import org.apache.tinkerpop.shaded.jackson.databind.JsonMappingException;
import org.junit.Test;
import java.util.ArrayList;
@@ -48,6 +53,7 @@ import java.util.UUID;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
/**
@@ -55,6 +61,7 @@ import static org.junit.Assert.fail;
*
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
+@SuppressWarnings("unchecked")
public class GraphSONMessageSerializerV3d0Test {
private final UUID requestId = UUID.fromString("6457272A-4018-4538-B9AE-08DD5DDC0AA1");
@@ -337,14 +344,52 @@ public class GraphSONMessageSerializerV3d0Test {
assertEquals("bytecode", m.getOp());
assertNotNull(m.getArgs());
}
-
+
+ @Test
+ public void shouldRegisterGremlinServerModuleAutomaticallyWithMapper() throws SerializationException {
+ GraphSONMapper.Builder builder = GraphSONMapper.build().addCustomModule(GraphSONXModuleV3d0.build().create(false));
+ GraphSONMessageSerializerV3d0 graphSONMessageSerializerV3d0 = new GraphSONMessageSerializerV3d0(builder);
+
+ ResponseMessage rm = convert("hello", graphSONMessageSerializerV3d0);
+ assertEquals(rm.getRequestId(), requestId);
+ assertEquals(rm.getResult().getData(), "hello");
+ }
+
+ @Test
+ public void shouldFailOnMessageSerializerWithMapperIfNoGremlinServerModule() {
+ Logger logger = Logger.getLogger(AbstractGraphSONMessageSerializerV2d0.class);
+ Level previousLevel = logger.getLevel();
+
+ // Disable temporarily logging for this test
+ logger.setLevel(Level.OFF);
+
+ GraphSONMapper.Builder builder = GraphSONMapper.build().addCustomModule(GraphSONXModuleV3d0.build().create(false));
+ GraphSONMessageSerializerV3d0 graphSONMessageSerializerV3d0 = new GraphSONMessageSerializerV3d0(builder.create());
+
+ try {
+ convert("hello", graphSONMessageSerializerV3d0);
+ fail("Serialization should have failed since no GremlinServerModule registered.");
+ } catch (SerializationException e) {
+ assertTrue(e.getMessage().contains("Could not find a type identifier for the class"));
+ assertTrue(e.getCause() instanceof JsonMappingException);
+ assertTrue(e.getCause().getCause() instanceof IllegalArgumentException);
+ }
+
+ // Put logger level back to its original value
+ logger.setLevel(previousLevel);
+ }
+
private void assertCommon(final ResponseMessage response) {
assertEquals(requestId, response.getRequestId());
assertEquals(ResponseStatusCode.SUCCESS, response.getStatus().getCode());
}
- private ResponseMessage convert(final Object toSerialize) throws SerializationException {
+ private ResponseMessage convert(final Object toSerialize, MessageSerializer serializer) throws SerializationException {
final ByteBuf bb = serializer.serializeResponseAsBinary(responseMessageBuilder.result(toSerialize).create(), allocator);
return serializer.deserializeResponse(bb);
}
+
+ private ResponseMessage convert(final Object toSerialize) throws SerializationException {
+ return convert(toSerialize, this.serializer);
+ }
}
[2/2] tinkerpop git commit: Merge branch 'pr-923'
Posted by sp...@apache.org.
Merge branch 'pr-923'
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/d6677350
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/d6677350
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/d6677350
Branch: refs/heads/master
Commit: d6677350b51180d1cd8d3f1b70a07871966e3264
Parents: bcee71a 66d6a86
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Sep 5 16:40:17 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Sep 5 16:40:17 2018 -0400
----------------------------------------------------------------------
CHANGELOG.asciidoc | 1 +
.../structure/io/graphson/GraphSONMapper.java | 17 ++++++
.../AbstractGraphSONMessageSerializerV2d0.java | 11 ++--
.../GraphSONMessageSerializerGremlinV2d0.java | 26 ++++++++-
.../ser/GraphSONMessageSerializerV2d0.java | 26 ++++++++-
.../ser/GraphSONMessageSerializerV3d0.java | 30 +++++++++--
.../ser/GraphSONMessageSerializerV2d0Test.java | 55 +++++++++++++++++++-
.../ser/GraphSONMessageSerializerV3d0Test.java | 49 ++++++++++++++++-
8 files changed, 200 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d6677350/CHANGELOG.asciidoc
----------------------------------------------------------------------