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 2021/04/02 12:31:44 UTC

[tinkerpop] branch master updated: Changed getMapper() to an MessageSerializer level method CTR

This is an automated email from the ASF dual-hosted git repository.

spmallette pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git


The following commit(s) were added to refs/heads/master by this push:
     new 3ba462f  Changed getMapper() to an MessageSerializer level method CTR
3ba462f is described below

commit 3ba462fca9a1fc43c559d1b328225bde649b6f96
Author: Stephen Mallette <st...@amazon.com>
AuthorDate: Fri Apr 2 08:31:01 2021 -0400

    Changed getMapper() to an MessageSerializer level method CTR
---
 CHANGELOG.asciidoc                                 |  1 +
 .../structure/io/binary/GraphBinaryMapper.java     | 41 ++++++++++++++++++++++
 .../apache/tinkerpop/gremlin/driver/Cluster.java   |  8 ++---
 .../gremlin/driver/MessageSerializer.java          |  7 +++-
 .../apache/tinkerpop/gremlin/driver/Settings.java  |  4 +--
 .../handler/WebSocketGremlinRequestEncoder.java    |  6 ++--
 .../handler/WebSocketGremlinResponseDecoder.java   |  6 ++--
 .../ser/AbstractGraphSONMessageSerializerV1d0.java |  3 +-
 .../ser/AbstractGraphSONMessageSerializerV2d0.java |  3 +-
 .../ser/AbstractGryoMessageSerializerV1d0.java     |  7 +++-
 .../ser/AbstractGryoMessageSerializerV3d0.java     |  7 +++-
 .../driver/ser/AbstractMessageSerializer.java      |  2 +-
 .../driver/ser/GraphBinaryMessageSerializerV1.java | 10 +++++-
 .../driver/ser/GraphSONMessageSerializerV1d0.java  |  3 +-
 .../driver/ser/GraphSONMessageSerializerV2d0.java  |  3 +-
 .../driver/ser/GraphSONMessageSerializerV3d0.java  |  3 +-
 .../gremlin/driver/ser/MessageTextSerializer.java  |  2 +-
 .../tinkerpop/gremlin/driver/ser/Serializers.java  |  2 +-
 .../gremlin/driver/simple/WebSocketClient.java     |  3 +-
 .../GraphSONMessageSerializerGremlinV1d0Test.java  |  3 +-
 .../GraphSONMessageSerializerGremlinV2d0Test.java  |  3 +-
 .../ser/GraphSONMessageSerializerV2d0Test.java     |  2 +-
 .../ser/GraphSONMessageSerializerV3d0Test.java     |  5 +--
 .../ser/GryoLiteMessageSerializerV1d0Test.java     |  3 +-
 .../driver/ser/GryoMessageSerializerV1d0Test.java  | 30 ++++++++--------
 .../gremlin/server/AbstractChannelizer.java        |  6 ++--
 .../handler/GremlinResponseFrameEncoder.java       |  6 ++--
 .../server/handler/HttpGremlinEndpointHandler.java | 10 +++---
 .../gremlin/server/handler/ServerSerializers.java  |  6 ++--
 .../tinkerpop/gremlin/server/handler/StateKey.java |  2 +-
 .../handler/WsGremlinBinaryRequestDecoder.java     |  8 ++---
 .../handler/WsGremlinCloseRequestDecoder.java      |  8 ++---
 .../handler/WsGremlinTextRequestDecoder.java       |  8 ++---
 .../gremlin/server/op/AbstractOpProcessor.java     |  6 ++--
 .../server/op/traversal/TraversalOpProcessor.java  |  2 +-
 .../server/GremlinResultSetIntegrateTest.java      | 12 ++++---
 .../server/GremlinServerAuthKrb5IntegrateTest.java |  2 +-
 37 files changed, 161 insertions(+), 82 deletions(-)

diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index be5f38b..65f438a 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -72,6 +72,7 @@ This release also includes changes from <<release-3-4-3, 3.4.3>>.
 * Bumped to Spark 3.0.0.
 * Bumped to Jackson 2.11.x.
 * Supported build for Java 11.
+* Added `MessageSerializer.getMapper()` to return the underlying object that handles serialization for a particular implementation.
 * Added a parameterized `TypeTranslator` for use with `GroovyTranslator` that should produce more cache hits.
 * Added support for `TextP` in Neo4j using its string search functions.
 * Added a kerberos KDC to the docker container for testing GLV's.
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/GraphBinaryMapper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/GraphBinaryMapper.java
new file mode 100644
index 0000000..049a90d
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/GraphBinaryMapper.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.binary;
+
+/**
+ * Holds a {@link GraphBinaryReader} and {@link GraphBinaryWriter} which together allow mapping in and out of the
+ * GraphBinary format.
+ */
+public final class GraphBinaryMapper {
+    private final GraphBinaryWriter writer;
+    private final GraphBinaryReader reader;
+
+    public GraphBinaryMapper(final GraphBinaryWriter writer, final GraphBinaryReader reader) {
+        this.writer = writer;
+        this.reader = reader;
+    }
+
+    public GraphBinaryWriter getWriter() {
+        return writer;
+    }
+
+    public GraphBinaryReader getReader() {
+        return reader;
+    }
+}
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
index b6fbca7..1aca514 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
@@ -465,7 +465,7 @@ public final class Cluster {
         return manager.factory;
     }
 
-    MessageSerializer getSerializer() {
+    MessageSerializer<?> getSerializer() {
         return manager.serializer;
     }
 
@@ -558,7 +558,7 @@ public final class Cluster {
         private List<InetAddress> addresses = new ArrayList<>();
         private int port = 8182;
         private String path = "/gremlin";
-        private MessageSerializer serializer = null;
+        private MessageSerializer<?> serializer = null;
         private int nioPoolSize = Runtime.getRuntime().availableProcessors();
         private int workerPoolSize = Runtime.getRuntime().availableProcessors() * 2;
         private int minConnectionPoolSize = ConnectionPool.MIN_POOL_SIZE;
@@ -645,7 +645,7 @@ public final class Cluster {
         /**
          * Sets the {@link MessageSerializer} to use.
          */
-        public Builder serializer(final MessageSerializer serializer) {
+        public Builder serializer(final MessageSerializer<?> serializer) {
             this.serializer = serializer;
             return this;
         }
@@ -1012,7 +1012,7 @@ public final class Cluster {
         private boolean initialized;
         private final List<InetSocketAddress> contactPoints;
         private final Factory factory;
-        private final MessageSerializer serializer;
+        private final MessageSerializer<?> serializer;
         private final Settings.ConnectionPoolSettings connectionPoolSettings;
         private final LoadBalancingStrategy loadBalancingStrategy;
         private final AuthProperties authProps;
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/MessageSerializer.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/MessageSerializer.java
index af39cd4..8b21ec4 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/MessageSerializer.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/MessageSerializer.java
@@ -42,11 +42,16 @@ import java.util.ServiceLoader;
  *
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
-public interface MessageSerializer {
+public interface MessageSerializer<M> {
 
     static final Logger logger = LoggerFactory.getLogger(MessageSerializer.class);
 
     /**
+     * Gets the "mapper" that performs the underlying serialization work.
+     */
+    M getMapper();
+
+    /**
      * Serialize a {@link ResponseMessage} to a Netty {@code ByteBuf}.
      *
      * @param responseMessage The response message to serialize to bytes.
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Settings.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Settings.java
index cd277b7..0e8ae0f 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Settings.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Settings.java
@@ -419,9 +419,9 @@ final class Settings {
          */
         public Map<String, Object> config = null;
 
-        public MessageSerializer create() throws Exception {
+        public MessageSerializer<?> create() throws Exception {
             final Class<?> clazz = Class.forName(className);
-            final MessageSerializer serializer = (MessageSerializer) clazz.newInstance();
+            final MessageSerializer<?> serializer = (MessageSerializer<?>) clazz.newInstance();
             Optional.ofNullable(config).ifPresent(c -> serializer.configure(c, null));
             return serializer;
         }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/handler/WebSocketGremlinRequestEncoder.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/handler/WebSocketGremlinRequestEncoder.java
index 9ffbc60..92dedab 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/handler/WebSocketGremlinRequestEncoder.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/handler/WebSocketGremlinRequestEncoder.java
@@ -39,9 +39,9 @@ import java.util.List;
 public final class WebSocketGremlinRequestEncoder extends MessageToMessageEncoder<RequestMessage> {
     private final boolean binaryEncoding;
 
-    private final MessageSerializer serializer;
+    private final MessageSerializer<?> serializer;
 
-    public WebSocketGremlinRequestEncoder(final boolean binaryEncoding, final MessageSerializer serializer) {
+    public WebSocketGremlinRequestEncoder(final boolean binaryEncoding, final MessageSerializer<?> serializer) {
         this.binaryEncoding = binaryEncoding;
         this.serializer = serializer;
     }
@@ -53,7 +53,7 @@ public final class WebSocketGremlinRequestEncoder extends MessageToMessageEncode
                 final ByteBuf encodedMessage = serializer.serializeRequestAsBinary(requestMessage, channelHandlerContext.alloc());
                 objects.add(new BinaryWebSocketFrame(encodedMessage));
             } else {
-                final MessageTextSerializer textSerializer = (MessageTextSerializer) serializer;
+                final MessageTextSerializer<?> textSerializer = (MessageTextSerializer<?>) serializer;
                 objects.add(new TextWebSocketFrame(textSerializer.serializeRequestAsString(requestMessage)));
             }
         } catch (Exception ex) {
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/handler/WebSocketGremlinResponseDecoder.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/handler/WebSocketGremlinResponseDecoder.java
index 3b292f8..2e93061 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/handler/WebSocketGremlinResponseDecoder.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/handler/WebSocketGremlinResponseDecoder.java
@@ -34,9 +34,9 @@ import java.util.List;
  */
 @ChannelHandler.Sharable
 public final class WebSocketGremlinResponseDecoder extends MessageToMessageDecoder<WebSocketFrame> {
-    private final MessageSerializer serializer;
+    private final MessageSerializer<?> serializer;
 
-    public WebSocketGremlinResponseDecoder(final MessageSerializer serializer) {
+    public WebSocketGremlinResponseDecoder(final MessageSerializer<?> serializer) {
         this.serializer = serializer;
     }
 
@@ -47,7 +47,7 @@ public final class WebSocketGremlinResponseDecoder extends MessageToMessageDecod
             objects.add(serializer.deserializeResponse(tf.content()));
         } else if (webSocketFrame instanceof TextWebSocketFrame) {
             final TextWebSocketFrame tf = (TextWebSocketFrame) webSocketFrame;
-            final MessageTextSerializer textSerializer = (MessageTextSerializer) serializer;
+            final MessageTextSerializer<?> textSerializer = (MessageTextSerializer<?>) serializer;
             objects.add(textSerializer.deserializeResponse(tf.text()));
         } else {
             throw new RuntimeException(String.format("WebSocket channel does not handle this type of message: %s", webSocketFrame.getClass().getName()));
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV1d0.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV1d0.java
index 0a2229b..76a1808 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV1d0.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV1d0.java
@@ -50,7 +50,7 @@ import java.util.UUID;
 /**
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
-public abstract class AbstractGraphSONMessageSerializerV1d0 extends AbstractMessageSerializer {
+public abstract class AbstractGraphSONMessageSerializerV1d0 extends AbstractMessageSerializer<ObjectMapper> {
     private static final Logger logger = LoggerFactory.getLogger(AbstractGraphSONMessageSerializerV1d0.class);
 
     protected ObjectMapper mapper;
@@ -154,6 +154,7 @@ public abstract class AbstractGraphSONMessageSerializerV1d0 extends AbstractMess
                 .version(GraphSONVersion.V1_0);
     }
 
+    @Override
     public ObjectMapper getMapper() {
         return this.mapper;
     }
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 5861b5a..5f2c220 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
@@ -48,7 +48,7 @@ import java.util.UUID;
 /**
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
-public abstract class AbstractGraphSONMessageSerializerV2d0 extends AbstractMessageSerializer {
+public abstract class AbstractGraphSONMessageSerializerV2d0 extends AbstractMessageSerializer<ObjectMapper> {
     private static final Logger logger = LoggerFactory.getLogger(AbstractGraphSONMessageSerializerV2d0.class);
 
     protected ObjectMapper mapper;
@@ -145,6 +145,7 @@ public abstract class AbstractGraphSONMessageSerializerV2d0 extends AbstractMess
                 .version(GraphSONVersion.V2_0);
     }
 
+    @Override
     public ObjectMapper getMapper() {
         return this.mapper;
     }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGryoMessageSerializerV1d0.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGryoMessageSerializerV1d0.java
index 799b3d9..368b6bb 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGryoMessageSerializerV1d0.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGryoMessageSerializerV1d0.java
@@ -50,7 +50,7 @@ import java.util.stream.Collectors;
  * @deprecated As of release 3.4.3, replaced by {@link GraphBinaryMessageSerializerV1}.
  */
 @Deprecated
-public abstract class AbstractGryoMessageSerializerV1d0 extends AbstractMessageSerializer {
+public abstract class AbstractGryoMessageSerializerV1d0 extends AbstractMessageSerializer<Kryo> {
     private GryoMapper gryoMapper;
     private ThreadLocal<Kryo> kryoThreadLocal = new ThreadLocal<Kryo>() {
         @Override
@@ -88,6 +88,11 @@ public abstract class AbstractGryoMessageSerializerV1d0 extends AbstractMessageS
     }
 
     @Override
+    public Kryo getMapper() {
+        return kryoThreadLocal.get();
+    }
+
+    @Override
     public final void configure(final Map<String, Object> config, final Map<String, Graph> graphs) {
         final GryoMapper.Builder builder = GryoMapper.build().version(GryoVersion.V1_0);
         addIoRegistries(config, builder);
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGryoMessageSerializerV3d0.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGryoMessageSerializerV3d0.java
index 2efb4a3..0affc90 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGryoMessageSerializerV3d0.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGryoMessageSerializerV3d0.java
@@ -47,7 +47,7 @@ import java.util.stream.Collectors;
  * @deprecated As of release 3.4.3, replaced by {@link GraphBinaryMessageSerializerV1}.
  */
 @Deprecated
-public abstract class AbstractGryoMessageSerializerV3d0 extends AbstractMessageSerializer {
+public abstract class AbstractGryoMessageSerializerV3d0 extends AbstractMessageSerializer<Kryo> {
     private GryoMapper gryoMapper;
     private ThreadLocal<Kryo> kryoThreadLocal = new ThreadLocal<Kryo>() {
         @Override
@@ -74,6 +74,11 @@ public abstract class AbstractGryoMessageSerializerV3d0 extends AbstractMessageS
         this.gryoMapper = kryo;
     }
 
+    @Override
+    public Kryo getMapper() {
+        return kryoThreadLocal.get();
+    }
+
     /**
      * Called from the {@link #configure(Map, Map)} method right before the call to create the builder. Sub-classes
      * can choose to alter the builder or completely replace it.
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractMessageSerializer.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractMessageSerializer.java
index 59d0aad..50124a6 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractMessageSerializer.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractMessageSerializer.java
@@ -33,7 +33,7 @@ import java.util.Map;
  *
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
-public abstract class AbstractMessageSerializer implements MessageSerializer {
+public abstract class AbstractMessageSerializer<M> implements MessageSerializer<M> {
     public static final String TOKEN_IO_REGISTRIES = "ioRegistries";
 
     /**
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphBinaryMessageSerializerV1.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphBinaryMessageSerializerV1.java
index 44125e1..2eea896 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphBinaryMessageSerializerV1.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphBinaryMessageSerializerV1.java
@@ -23,6 +23,7 @@ import io.netty.buffer.ByteBufAllocator;
 import org.apache.tinkerpop.gremlin.driver.message.RequestMessage;
 import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
 import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryIo;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryMapper;
 import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
 import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.driver.ser.binary.RequestMessageSerializer;
@@ -42,7 +43,7 @@ import java.util.stream.Collectors;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 
-public class GraphBinaryMessageSerializerV1 extends AbstractMessageSerializer {
+public class GraphBinaryMessageSerializerV1 extends AbstractMessageSerializer<GraphBinaryMapper> {
 
     public static final String TOKEN_CUSTOM = "custom";
     public static final String TOKEN_BUILDER = "builder";
@@ -57,6 +58,7 @@ public class GraphBinaryMessageSerializerV1 extends AbstractMessageSerializer {
     private GraphBinaryWriter writer;
     private RequestMessageSerializer requestSerializer;
     private ResponseMessageSerializer responseSerializer;
+    private GraphBinaryMapper mapper;
 
     /**
      * Creates a new instance of the message serializer using the default type serializers.
@@ -68,6 +70,7 @@ public class GraphBinaryMessageSerializerV1 extends AbstractMessageSerializer {
     public GraphBinaryMessageSerializerV1(final TypeSerializerRegistry registry) {
         reader = new GraphBinaryReader(registry);
         writer = new GraphBinaryWriter(registry);
+        mapper = new GraphBinaryMapper(writer, reader);
 
         requestSerializer = new RequestMessageSerializer();
         responseSerializer = new ResponseMessageSerializer();
@@ -78,6 +81,11 @@ public class GraphBinaryMessageSerializerV1 extends AbstractMessageSerializer {
     }
 
     @Override
+    public GraphBinaryMapper getMapper() {
+        return mapper;
+    }
+
+    @Override
     public void configure(final Map<String, Object> config, final Map<String, Graph> graphs) {
         final String builderClassName = (String) config.get(TOKEN_BUILDER);
         final TypeSerializerRegistry.Builder builder;
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV1d0.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV1d0.java
index 58dbbdf..d3a15f5 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV1d0.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV1d0.java
@@ -24,6 +24,7 @@ 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.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -36,7 +37,7 @@ import java.util.UUID;
  *
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
-public final class GraphSONMessageSerializerV1d0 extends AbstractGraphSONMessageSerializerV1d0 implements MessageTextSerializer {
+public final class GraphSONMessageSerializerV1d0 extends AbstractGraphSONMessageSerializerV1d0 implements MessageTextSerializer<ObjectMapper> {
     private static final Logger logger = LoggerFactory.getLogger(GraphSONMessageSerializerV1d0.class);
     private static final String MIME_TYPE = SerTokens.MIME_JSON;
 
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 e860dee..6717a00 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
@@ -25,6 +25,7 @@ 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.GraphSONXModuleV2d0;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.TypeInfo;
+import org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -37,7 +38,7 @@ import java.util.UUID;
  *
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
-public final class GraphSONMessageSerializerV2d0 extends AbstractGraphSONMessageSerializerV2d0 implements MessageTextSerializer {
+public final class GraphSONMessageSerializerV2d0 extends AbstractGraphSONMessageSerializerV2d0 implements MessageTextSerializer<ObjectMapper> {
     private static final Logger logger = LoggerFactory.getLogger(GraphSONMessageSerializerV2d0.class);
     private static final String MIME_TYPE = SerTokens.MIME_GRAPHSON_V2D0;
 
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 9547b3d..da3eea7 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
@@ -23,6 +23,7 @@ import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
 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.GraphSONXModuleV3d0;
+import org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -33,7 +34,7 @@ import java.nio.ByteBuffer;
  *
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
-public final class GraphSONMessageSerializerV3d0 extends AbstractGraphSONMessageSerializerV2d0 implements MessageTextSerializer {
+public final class GraphSONMessageSerializerV3d0 extends AbstractGraphSONMessageSerializerV2d0 implements MessageTextSerializer<ObjectMapper> {
     private static final Logger logger = LoggerFactory.getLogger(GraphSONMessageSerializerV3d0.class);
     private static final String MIME_TYPE = SerTokens.MIME_GRAPHSON_V3D0;
 
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/MessageTextSerializer.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/MessageTextSerializer.java
index 912c786..289d56d 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/MessageTextSerializer.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/MessageTextSerializer.java
@@ -30,7 +30,7 @@ import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
  *
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
-public interface MessageTextSerializer extends MessageSerializer {
+public interface MessageTextSerializer<M> extends MessageSerializer<M> {
     public String serializeResponseAsString(final ResponseMessage responseMessage) throws SerializationException;
 
     public String serializeRequestAsString(final RequestMessage requestMessage) throws SerializationException;
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/Serializers.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/Serializers.java
index c1cf305..70c50f3 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/Serializers.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/Serializers.java
@@ -65,7 +65,7 @@ public enum Serializers {
         return value;
     }
 
-    public MessageSerializer simpleInstance() {
+    public MessageSerializer<?> simpleInstance() {
         switch (value) {
             case SerTokens.MIME_JSON:
                 return new GraphSONMessageSerializerV3d0();
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/simple/WebSocketClient.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/simple/WebSocketClient.java
index df1b0d4..4cc6817 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/simple/WebSocketClient.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/simple/WebSocketClient.java
@@ -37,6 +37,7 @@ import io.netty.handler.codec.http.HttpObjectAggregator;
 import io.netty.handler.codec.http.websocketx.WebSocketClientHandshakerFactory;
 import io.netty.handler.codec.http.websocketx.WebSocketVersion;
 import org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryMapper;
 
 import java.io.IOException;
 import java.net.URI;
@@ -65,7 +66,7 @@ public class WebSocketClient extends AbstractClient {
         try {
             final WebSocketClientHandler wsHandler = new WebSocketClientHandler(WebSocketClientHandshakerFactory.newHandshaker(
                     uri, WebSocketVersion.V13, null, true, EmptyHttpHeaders.INSTANCE, 65536), 10000);
-            final MessageSerializer serializer = new GraphBinaryMessageSerializerV1();
+            final MessageSerializer<GraphBinaryMapper> serializer = new GraphBinaryMessageSerializerV1();
             b.channel(NioSocketChannel.class)
                     .handler(new ChannelInitializer<SocketChannel>() {
                         @Override
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV1d0Test.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV1d0Test.java
index f9362be..8cba236 100644
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV1d0Test.java
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV1d0Test.java
@@ -34,6 +34,7 @@ import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTokens;
 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.ObjectMapper;
 import org.apache.tinkerpop.shaded.jackson.databind.util.StdDateFormat;
 import org.junit.Test;
 
@@ -60,7 +61,7 @@ public class GraphSONMessageSerializerGremlinV1d0Test {
     private ResponseMessage.Builder responseMessageBuilder = ResponseMessage.build(requestId);
     private static ByteBufAllocator allocator = UnpooledByteBufAllocator.DEFAULT;
 
-    public MessageSerializer serializer = new GraphSONMessageSerializerGremlinV1d0();
+    public MessageSerializer<ObjectMapper> serializer = new GraphSONMessageSerializerGremlinV1d0();
 
     @Test
     public void shouldSerializeIterable() throws Exception {
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV2d0Test.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV2d0Test.java
index 7d3e702..21970be 100644
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV2d0Test.java
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV2d0Test.java
@@ -36,6 +36,7 @@ import org.apache.tinkerpop.gremlin.structure.io.graphson.AbstractObjectDeserial
 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.ObjectMapper;
 import org.apache.tinkerpop.shaded.jackson.databind.util.StdDateFormat;
 import org.junit.Assert;
 import org.junit.Test;
@@ -66,7 +67,7 @@ public class GraphSONMessageSerializerGremlinV2d0Test {
     private final ResponseMessage.Builder responseMessageBuilder = ResponseMessage.build(requestId);
     private final static ByteBufAllocator allocator = UnpooledByteBufAllocator.DEFAULT;
 
-    public final MessageSerializer serializer = new GraphSONMessageSerializerGremlinV2d0();
+    public final MessageSerializer<ObjectMapper> serializer = new GraphSONMessageSerializerGremlinV2d0();
 
     @Test
     public void shouldSerializeIterable() throws Exception {
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 dc23179..897b759 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
@@ -588,7 +588,7 @@ public class GraphSONMessageSerializerV2d0Test {
         logger.setLevel(previousLevel);
     }
 
-    private ResponseMessage convert(final Object toSerialize, MessageSerializer serializer) 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);
     }
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 b9ca43c..29de3c3 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
@@ -40,6 +40,7 @@ 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.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
 import org.junit.Test;
 
 import java.util.ArrayList;
@@ -68,7 +69,7 @@ public class GraphSONMessageSerializerV3d0Test {
     private final ResponseMessage.Builder responseMessageBuilder = ResponseMessage.build(requestId);
     private final static ByteBufAllocator allocator = UnpooledByteBufAllocator.DEFAULT;
 
-    public final MessageSerializer serializer = new GraphSONMessageSerializerV3d0();
+    public final MessageSerializer<ObjectMapper> serializer = new GraphSONMessageSerializerV3d0();
 
     @Test
     public void shouldSerializeIterable() throws Exception {
@@ -386,7 +387,7 @@ public class GraphSONMessageSerializerV3d0Test {
         assertEquals(ResponseStatusCode.SUCCESS, response.getStatus().getCode());
     }
 
-    private ResponseMessage convert(final Object toSerialize, MessageSerializer serializer) 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);
     }
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoLiteMessageSerializerV1d0Test.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoLiteMessageSerializerV1d0Test.java
index fe1ce63..ffc3522 100644
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoLiteMessageSerializerV1d0Test.java
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoLiteMessageSerializerV1d0Test.java
@@ -34,6 +34,7 @@ import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex;
 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.kryo.Kryo;
 import org.junit.Test;
 
 import java.util.ArrayList;
@@ -58,7 +59,7 @@ public class GryoLiteMessageSerializerV1d0Test {
     private ResponseMessage.Builder responseMessageBuilder = ResponseMessage.build(requestId);
     private static ByteBufAllocator allocator = UnpooledByteBufAllocator.DEFAULT;
 
-    public MessageSerializer binarySerializer = new GryoLiteMessageSerializerV1d0();
+    public MessageSerializer<Kryo> binarySerializer = new GryoLiteMessageSerializerV1d0();
 
     @Test
     public void shouldSerializeEdge() throws Exception {
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoMessageSerializerV1d0Test.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoMessageSerializerV1d0Test.java
index eba54a0..ea8c197 100644
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoMessageSerializerV1d0Test.java
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GryoMessageSerializerV1d0Test.java
@@ -91,7 +91,7 @@ public class GryoMessageSerializerV1d0Test {
     public String name;
 
     @Parameterized.Parameter(value = 1)
-    public Supplier<MessageSerializer> serializerSupplier;
+    public Supplier<MessageSerializer<?>> serializerSupplier;
 
     private static final Map<String, Object> configForText = new HashMap<String, Object>() {{
         put(GryoMessageSerializerV1d0.TOKEN_SERIALIZE_RESULT_TO_STRING, true);
@@ -107,7 +107,7 @@ public class GryoMessageSerializerV1d0Test {
             put(GryoMessageSerializerV1d0.TOKEN_IO_REGISTRIES, Collections.singletonList(ColorIoRegistry.class.getName()));
         }};
 
-        final MessageSerializer serializer = serializerSupplier.get();
+        final MessageSerializer<?> serializer = serializerSupplier.get();
         serializer.configure(config, null);
 
         final ResponseMessage toSerialize = ResponseMessage.build(requestId).result(Color.RED).create();
@@ -124,7 +124,7 @@ public class GryoMessageSerializerV1d0Test {
             put(GryoMessageSerializerV1d0.TOKEN_IO_REGISTRIES, Collections.singletonList(ColorIoRegistryInstance.class.getName()));
         }};
 
-        final MessageSerializer serializer = serializerSupplier.get();
+        final MessageSerializer<?> serializer = serializerSupplier.get();
         serializer.configure(config, null);
 
         final ResponseMessage toSerialize = ResponseMessage.build(requestId).result(Color.RED).create();
@@ -141,7 +141,7 @@ public class GryoMessageSerializerV1d0Test {
             put(GryoMessageSerializerV1d0.TOKEN_IO_REGISTRIES, Collections.singletonList(ColorIoRegistryGetInstance.class.getName()));
         }};
 
-        final MessageSerializer serializer = serializerSupplier.get();
+        final MessageSerializer<?> serializer = serializerSupplier.get();
         serializer.configure(config, null);
 
         final ResponseMessage toSerialize = ResponseMessage.build(requestId).result(Color.RED).create();
@@ -158,7 +158,7 @@ public class GryoMessageSerializerV1d0Test {
             put(GryoMessageSerializerV1d0.TOKEN_CLASS_RESOLVER_SUPPLIER, ErrorOnlyClassResolverSupplier.class.getName());
         }};
 
-        final MessageSerializer serializer = serializerSupplier.get();
+        final MessageSerializer<?> serializer = serializerSupplier.get();
         serializer.configure(config, null);
 
         try {
@@ -175,7 +175,7 @@ public class GryoMessageSerializerV1d0Test {
             put(GryoMessageSerializerV1d0.TOKEN_CLASS_RESOLVER_SUPPLIER, ErrorOnlyClassResolverSupplierAsInstance.class.getName());
         }};
 
-        final MessageSerializer serializer = serializerSupplier.get();
+        final MessageSerializer<?> serializer = serializerSupplier.get();
         serializer.configure(config, null);
 
         try {
@@ -192,7 +192,7 @@ public class GryoMessageSerializerV1d0Test {
             put(GryoMessageSerializerV1d0.TOKEN_CLASS_RESOLVER_SUPPLIER, ErrorOnlyClassResolverSupplierAsGetInstance.class.getName());
         }};
 
-        final MessageSerializer serializer = serializerSupplier.get();
+        final MessageSerializer<?> serializer = serializerSupplier.get();
         serializer.configure(config, null);
 
         try {
@@ -362,7 +362,7 @@ public class GryoMessageSerializerV1d0Test {
                 .statusMessage("worked")
                 .create();
 
-        final MessageSerializer serializer = serializerSupplier.get();
+        final MessageSerializer<?> serializer = serializerSupplier.get();
         final ByteBuf bb = serializer.serializeResponseAsBinary(response, allocator);
         final ResponseMessage deserialized = serializer.deserializeResponse(bb);
 
@@ -396,7 +396,7 @@ public class GryoMessageSerializerV1d0Test {
                 .statusMessage("worked")
                 .create();
 
-        final MessageSerializer binarySerializerWithSmallBuffer = new GryoMessageSerializerV1d0();
+        final MessageSerializer<Kryo> binarySerializerWithSmallBuffer = new GryoMessageSerializerV1d0();
         final Map<String, Object> configWithSmallBuffer = new HashMap<String, Object>() {{
             put("bufferSize", 1);
         }};
@@ -431,7 +431,7 @@ public class GryoMessageSerializerV1d0Test {
                 .statusMessage("worked")
                 .create();
 
-        final MessageSerializer binarySerializerWithSmallBuffer = new GryoMessageSerializerV1d0();
+        final MessageSerializer<Kryo> binarySerializerWithSmallBuffer = new GryoMessageSerializerV1d0();
         final Map<String, Object> configWithSmallBuffer = new HashMap<String, Object>() {{
             // set to bufferSize < total message size but still greater than any individual object requires
             put("bufferSize", 50);
@@ -453,7 +453,7 @@ public class GryoMessageSerializerV1d0Test {
                 .addArg("test", "this")
                 .create();
 
-        final MessageSerializer serializer = serializerSupplier.get();
+        final MessageSerializer<?> serializer = serializerSupplier.get();
         final ByteBuf bb = serializer.serializeRequestAsBinary(request, allocator);
         final int mimeLen = bb.readByte();
         bb.readBytes(new byte[mimeLen]);
@@ -475,7 +475,7 @@ public class GryoMessageSerializerV1d0Test {
                 .addArg("test", "this")
                 .create();
 
-        final MessageSerializer binarySerializerWithSmallBuffer = new GryoMessageSerializerV1d0();
+        final MessageSerializer<Kryo> binarySerializerWithSmallBuffer = new GryoMessageSerializerV1d0();
         final Map<String, Object> configWithSmallBuffer = new HashMap<String, Object>() {{
             put("bufferSize", 1);
         }};
@@ -500,7 +500,7 @@ public class GryoMessageSerializerV1d0Test {
                 .addArg("test", "this")
                 .create();
 
-        final MessageSerializer binarySerializerWithSmallBuffer = new GryoMessageSerializerV1d0();
+        final MessageSerializer<Kryo> binarySerializerWithSmallBuffer = new GryoMessageSerializerV1d0();
         final Map<String, Object> configWithSmallBuffer = new HashMap<String, Object>() {{
             // set to bufferSize < total message size but still greater than any individual object requires
             put("bufferSize", 50);
@@ -649,13 +649,13 @@ public class GryoMessageSerializerV1d0Test {
     }
 
     private ResponseMessage convertBinary(final Object toSerialize) throws SerializationException {
-        final MessageSerializer serializer = serializerSupplier.get();
+        final MessageSerializer<?> serializer = serializerSupplier.get();
         final ByteBuf bb = serializer.serializeResponseAsBinary(responseMessageBuilder.result(toSerialize).create(), allocator);
         return serializer.deserializeResponse(bb);
     }
 
     private ResponseMessage convertText(final Object toSerialize) throws SerializationException {
-        final MessageSerializer serializer = serializerSupplier.get();
+        final MessageSerializer<?> serializer = serializerSupplier.get();
         serializer.configure(configForText, null);
         final ByteBuf bb = serializer.serializeResponseAsBinary(responseMessageBuilder.result(toSerialize).create(), allocator);
         return serializer.deserializeResponse(bb);
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java
index fe3c9e8..1e2287ea 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java
@@ -107,7 +107,7 @@ public abstract class AbstractChannelizer extends ChannelInitializer<SocketChann
 
     protected static final String GREMLIN_ENDPOINT = "/gremlin";
 
-    protected final Map<String, MessageSerializer> serializers = new HashMap<>();
+    protected final Map<String, MessageSerializer<?>> serializers = new HashMap<>();
 
     private OpSelectorHandler opSelectorHandler;
     private OpExecutorHandler opExecutorHandler;
@@ -237,7 +237,7 @@ public abstract class AbstractChannelizer extends ChannelInitializer<SocketChann
                 if (clazz.getAnnotation(Deprecated.class) != null)
                     logger.warn("The {} serialization class is deprecated.", config.className);
 
-                final MessageSerializer serializer = (MessageSerializer) clazz.newInstance();
+                final MessageSerializer<?> serializer = (MessageSerializer) clazz.newInstance();
                 final Map<String, Graph> graphsDefinedAtStartup = new HashMap<>();
                 for (String graphName : settings.graphs.keySet()) {
                     graphsDefinedAtStartup.put(graphName, graphManager.getGraph(graphName));
@@ -258,7 +258,7 @@ public abstract class AbstractChannelizer extends ChannelInitializer<SocketChann
                         Stream.of(serializer.mimeTypesSupported()).map(mimeType -> Pair.with(mimeType, serializer))
         ).forEach(pair -> {
             final String mimeType = pair.getValue0();
-            final MessageSerializer serializer = pair.getValue1();
+            final MessageSerializer<?> serializer = pair.getValue1();
             if (serializers.containsKey(mimeType))
                 logger.info("{} already has {} configured - it will not be replaced by {}, change order of serialization configuration if this is not desired.",
                         mimeType, serializers.get(mimeType).getClass().getName(), serializer.getClass().getName());
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/GremlinResponseFrameEncoder.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/GremlinResponseFrameEncoder.java
index 3aa8c36..6020b36 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/GremlinResponseFrameEncoder.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/GremlinResponseFrameEncoder.java
@@ -52,7 +52,7 @@ public class GremlinResponseFrameEncoder extends MessageToMessageEncoder<Respons
 
     @Override
     protected void encode(final ChannelHandlerContext ctx, final ResponseMessage o, final List<Object> objects) throws Exception {
-        final MessageSerializer serializer = ctx.channel().attr(StateKey.SERIALIZER).get();
+        final MessageSerializer<?> serializer = ctx.channel().attr(StateKey.SERIALIZER).get();
         final boolean useBinary = ctx.channel().attr(StateKey.USE_BINARY).get();
         final Session session = ctx.channel().attr(StateKey.SESSION).get();
 
@@ -77,7 +77,7 @@ public class GremlinResponseFrameEncoder extends MessageToMessageEncoder<Respons
             } else {
                 // the expectation is that the GremlinTextRequestDecoder will have placed a MessageTextSerializer
                 // instance on the channel.
-                final MessageTextSerializer textSerializer = (MessageTextSerializer) serializer;
+                final MessageTextSerializer<?> textSerializer = (MessageTextSerializer<?>) serializer;
 
                 final Frame serialized;
 
@@ -101,7 +101,7 @@ public class GremlinResponseFrameEncoder extends MessageToMessageEncoder<Respons
             if (useBinary) {
                 objects.add(serializer.serializeResponseAsBinary(error, ctx.alloc()));
             } else {
-                final MessageTextSerializer textSerializer = (MessageTextSerializer) serializer;
+                final MessageTextSerializer<?> textSerializer = (MessageTextSerializer<?>) serializer;
                 objects.add(textSerializer.serializeResponseAsString(error));
             }
         }
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpGremlinEndpointHandler.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpGremlinEndpointHandler.java
index 706cee9..2ddc202 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpGremlinEndpointHandler.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpGremlinEndpointHandler.java
@@ -96,7 +96,7 @@ public class HttpGremlinEndpointHandler extends ChannelInboundHandlerAdapter {
     /**
      * Serializers for the response.
      */
-    private final Map<String, MessageSerializer> serializers;
+    private final Map<String, MessageSerializer<?>> serializers;
 
     private final GremlinExecutor gremlinExecutor;
     private final GraphManager graphManager;
@@ -104,7 +104,7 @@ public class HttpGremlinEndpointHandler extends ChannelInboundHandlerAdapter {
 
     private static final Pattern pattern = Pattern.compile("(.*);q=(.*)");
 
-    public HttpGremlinEndpointHandler(final Map<String, MessageSerializer> serializers,
+    public HttpGremlinEndpointHandler(final Map<String, MessageSerializer<?>> serializers,
                                       final GremlinExecutor gremlinExecutor,
                                       final GraphManager graphManager,
                                       final Settings settings) {
@@ -146,7 +146,7 @@ public class HttpGremlinEndpointHandler extends ChannelInboundHandlerAdapter {
             }
 
             final String acceptString = Optional.ofNullable(req.headers().get("Accept")).orElse("application/json");
-            final Pair<String, MessageTextSerializer> serializer = chooseSerializer(acceptString);
+            final Pair<String, MessageTextSerializer<?>> serializer = chooseSerializer(acceptString);
             if (null == serializer) {
                 HttpHandlerUtil.sendError(ctx, BAD_REQUEST, String.format("no serializer for requested Accept header: %s", acceptString),
                         keepAlive);
@@ -308,7 +308,7 @@ public class HttpGremlinEndpointHandler extends ChannelInboundHandlerAdapter {
         return bindings;
     }
 
-    private Pair<String, MessageTextSerializer> chooseSerializer(final String acceptString) {
+    private Pair<String, MessageTextSerializer<?>> chooseSerializer(final String acceptString) {
         final List<Pair<String, Double>> ordered = Stream.of(acceptString.split(",")).map(mediaType -> {
             // parse out each mediaType with its params - keeping it simple and just looking for "quality".  if
             // that value isn't there, default it to 1.0.  not really validating here so users better get their
@@ -322,7 +322,7 @@ public class HttpGremlinEndpointHandler extends ChannelInboundHandlerAdapter {
             // super useful for gremlin server really.
             final String accept = p.getValue0().equals("*/*") ? "application/json" : p.getValue0();
             if (serializers.containsKey(accept))
-                return Pair.with(accept, (MessageTextSerializer) serializers.get(accept));
+                return Pair.with(accept, (MessageTextSerializer<?>) serializers.get(accept));
         }
 
         return null;
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/ServerSerializers.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/ServerSerializers.java
index 09b7599..32c13da 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/ServerSerializers.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/ServerSerializers.java
@@ -21,6 +21,8 @@ package org.apache.tinkerpop.gremlin.server.handler;
 import org.apache.tinkerpop.gremlin.driver.MessageSerializer;
 import org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1;
 import org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryMapper;
+import org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
 
 /**
  * @author Stephen Mallette (http://stephen.genoprime.com)
@@ -33,12 +35,12 @@ final class ServerSerializers {
      * Default binary serializer used by the server when the serializer requested does not match what is on the server.
      * This defaults to GraphBinary 1.0.
      */
-    static final MessageSerializer DEFAULT_BINARY_SERIALIZER = new GraphBinaryMessageSerializerV1();
+    static final MessageSerializer<GraphBinaryMapper> DEFAULT_BINARY_SERIALIZER = new GraphBinaryMessageSerializerV1();
 
     /**
      * Default binary serializer used by the server when the serializer requested does not match what is on the server.
      * This defaults to GraphSON 3.0.
      */
-    static final MessageSerializer DEFAULT_TEXT_SERIALIZER = new GraphSONMessageSerializerV3d0();
+    static final MessageSerializer<ObjectMapper> DEFAULT_TEXT_SERIALIZER = new GraphSONMessageSerializerV3d0();
 
 }
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/StateKey.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/StateKey.java
index 7890bec..4b5f581 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/StateKey.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/StateKey.java
@@ -37,7 +37,7 @@ public final class StateKey {
     /**
      * The key for the current serializer requested by the client.
      */
-    public static final AttributeKey<MessageSerializer> SERIALIZER = AttributeKey.valueOf("serializer");
+    public static final AttributeKey<MessageSerializer<?>> SERIALIZER = AttributeKey.valueOf("serializer");
 
     /**
      * The key to indicate if the serializer should use its binary format.
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/WsGremlinBinaryRequestDecoder.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/WsGremlinBinaryRequestDecoder.java
index e3b61bc..b05ae92 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/WsGremlinBinaryRequestDecoder.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/WsGremlinBinaryRequestDecoder.java
@@ -45,9 +45,9 @@ public class WsGremlinBinaryRequestDecoder extends MessageToMessageDecoder<Binar
     private static final Logger logger = LoggerFactory.getLogger(WsGremlinBinaryRequestDecoder.class);
 
     private static final Charset UTF8 = Charset.forName("UTF-8");
-    private final Map<String, MessageSerializer> serializers;
+    private final Map<String, MessageSerializer<?>> serializers;
 
-    public WsGremlinBinaryRequestDecoder(final Map<String, MessageSerializer> serializers) {
+    public WsGremlinBinaryRequestDecoder(final Map<String, MessageSerializer<?>> serializers) {
         this.serializers = serializers;
     }
 
@@ -64,7 +64,7 @@ public class WsGremlinBinaryRequestDecoder extends MessageToMessageDecoder<Binar
         try {
             messageBytes.readBytes(contentTypeBytes);
             final String contentType = contentTypeBytes.toString(UTF8);
-            final MessageSerializer serializer = select(contentType, ServerSerializers.DEFAULT_BINARY_SERIALIZER);
+            final MessageSerializer<?> serializer = select(contentType, ServerSerializers.DEFAULT_BINARY_SERIALIZER);
 
             // it's important to re-initialize these channel attributes as they apply globally to the channel. in
             // other words, the next request to this channel might not come with the same configuration and mixed
@@ -83,7 +83,7 @@ public class WsGremlinBinaryRequestDecoder extends MessageToMessageDecoder<Binar
         }
     }
 
-    private MessageSerializer select(final String mimeType, final MessageSerializer defaultSerializer) {
+    private MessageSerializer<?> select(final String mimeType, final MessageSerializer<?> defaultSerializer) {
         if (logger.isWarnEnabled() && !serializers.containsKey(mimeType))
             logger.warn("Gremlin Server is not configured with a serializer for the requested mime type [{}] - using {} by default",
                     mimeType, defaultSerializer.getClass().getName());
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/WsGremlinCloseRequestDecoder.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/WsGremlinCloseRequestDecoder.java
index 6281851..c9a48c6 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/WsGremlinCloseRequestDecoder.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/WsGremlinCloseRequestDecoder.java
@@ -44,9 +44,9 @@ public class WsGremlinCloseRequestDecoder extends MessageToMessageDecoder<CloseW
     private static final Logger logger = LoggerFactory.getLogger(WsGremlinCloseRequestDecoder.class);
 
     private static final Charset UTF8 = Charset.forName("UTF-8");
-    private final Map<String, MessageSerializer> serializers;
+    private final Map<String, MessageSerializer<?>> serializers;
 
-    public WsGremlinCloseRequestDecoder(final Map<String, MessageSerializer> serializers) {
+    public WsGremlinCloseRequestDecoder(final Map<String, MessageSerializer<?>> serializers) {
         this.serializers = serializers;
     }
 
@@ -63,7 +63,7 @@ public class WsGremlinCloseRequestDecoder extends MessageToMessageDecoder<CloseW
         try {
             messageBytes.readBytes(contentTypeBytes);
             final String contentType = contentTypeBytes.toString(UTF8);
-            final MessageSerializer serializer = select(contentType, ServerSerializers.DEFAULT_BINARY_SERIALIZER);
+            final MessageSerializer<?> serializer = select(contentType, ServerSerializers.DEFAULT_BINARY_SERIALIZER);
 
             // it's important to re-initialize these channel attributes as they apply globally to the channel. in
             // other words, the next request to this channel might not come with the same configuration and mixed
@@ -82,7 +82,7 @@ public class WsGremlinCloseRequestDecoder extends MessageToMessageDecoder<CloseW
         }
     }
 
-    private MessageSerializer select(final String mimeType, final MessageSerializer defaultSerializer) {
+    private MessageSerializer<?> select(final String mimeType, final MessageSerializer<?> defaultSerializer) {
         if (logger.isWarnEnabled() && !serializers.containsKey(mimeType))
             logger.warn("Gremlin Server is not configured with a serializer for the requested mime type [{}] - using {} by default",
                     mimeType, defaultSerializer.getClass().getName());
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/WsGremlinTextRequestDecoder.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/WsGremlinTextRequestDecoder.java
index 77472ac..50dc6f3 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/WsGremlinTextRequestDecoder.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/WsGremlinTextRequestDecoder.java
@@ -42,9 +42,9 @@ import java.util.Map;
 public class WsGremlinTextRequestDecoder extends MessageToMessageDecoder<TextWebSocketFrame> {
     private static final Logger logger = LoggerFactory.getLogger(WsGremlinTextRequestDecoder.class);
 
-    private final Map<String, MessageSerializer> serializers;
+    private final Map<String, MessageSerializer<?>> serializers;
 
-    public WsGremlinTextRequestDecoder(final Map<String, MessageSerializer> serializers) {
+    public WsGremlinTextRequestDecoder(final Map<String, MessageSerializer<?>> serializers) {
         this.serializers = serializers;
     }
 
@@ -52,7 +52,7 @@ public class WsGremlinTextRequestDecoder extends MessageToMessageDecoder<TextWeb
     protected void decode(final ChannelHandlerContext channelHandlerContext, final TextWebSocketFrame frame, final List<Object> objects) throws Exception {
         try {
             // the default serializer must be a MessageTextSerializer instance to be compatible with this decoder
-            final MessageTextSerializer serializer = (MessageTextSerializer) select("application/json", ServerSerializers.DEFAULT_TEXT_SERIALIZER);
+            final MessageTextSerializer<?> serializer = (MessageTextSerializer<?>) select("application/json", ServerSerializers.DEFAULT_TEXT_SERIALIZER);
 
             // it's important to re-initialize these channel attributes as they apply globally to the channel. in
             // other words, the next request to this channel might not come with the same configuration and mixed
@@ -67,7 +67,7 @@ public class WsGremlinTextRequestDecoder extends MessageToMessageDecoder<TextWeb
         }
     }
 
-    private MessageSerializer select(final String mimeType, final MessageSerializer defaultSerializer) {
+    private MessageSerializer<?> select(final String mimeType, final MessageSerializer<?> defaultSerializer) {
         if (logger.isWarnEnabled() && !serializers.containsKey(mimeType))
             logger.warn("Gremlin Server is not configured with a serializer for the requested mime type [{}] - using {} by default",
                     mimeType, defaultSerializer.getClass().getName());
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractOpProcessor.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractOpProcessor.java
index a616ffb..1498c51 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractOpProcessor.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractOpProcessor.java
@@ -85,7 +85,7 @@ public abstract class AbstractOpProcessor implements OpProcessor {
         final ChannelHandlerContext nettyContext = context.getChannelHandlerContext();
         final RequestMessage msg = context.getRequestMessage();
         final Settings settings = context.getSettings();
-        final MessageSerializer serializer = nettyContext.channel().attr(StateKey.SERIALIZER).get();
+        final MessageSerializer<?> serializer = nettyContext.channel().attr(StateKey.SERIALIZER).get();
         final boolean useBinary = nettyContext.channel().attr(StateKey.USE_BINARY).get();
         boolean warnOnce = false;
 
@@ -281,7 +281,7 @@ public abstract class AbstractOpProcessor implements OpProcessor {
     }
 
     protected static Frame makeFrame(final Context ctx, final RequestMessage msg,
-                                     final MessageSerializer serializer, final boolean useBinary, final List<Object> aggregate,
+                                     final MessageSerializer<?> serializer, final boolean useBinary, final List<Object> aggregate,
                                      final ResponseStatusCode code, final Map<String,Object> responseMetaData,
                                      final Map<String,Object> statusAttributes) throws Exception {
         try {
@@ -296,7 +296,7 @@ public abstract class AbstractOpProcessor implements OpProcessor {
             } else {
                 // the expectation is that the GremlinTextRequestDecoder will have placed a MessageTextSerializer
                 // instance on the channel.
-                final MessageTextSerializer textSerializer = (MessageTextSerializer) serializer;
+                final MessageTextSerializer<?> textSerializer = (MessageTextSerializer<?>) serializer;
                 return new Frame(textSerializer.serializeResponseAsString(ResponseMessage.build(msg)
                         .code(code)
                         .statusAttributes(statusAttributes)
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
index 0697b5b..9582a84 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
@@ -288,7 +288,7 @@ public class TraversalOpProcessor extends AbstractOpProcessor {
         final ChannelHandlerContext nettyContext = context.getChannelHandlerContext();
         final RequestMessage msg = context.getRequestMessage();
         final Settings settings = context.getSettings();
-        final MessageSerializer serializer = nettyContext.channel().attr(StateKey.SERIALIZER).get();
+        final MessageSerializer<?> serializer = nettyContext.channel().attr(StateKey.SERIALIZER).get();
         final boolean useBinary = nettyContext.channel().attr(StateKey.USE_BINARY).get();
         boolean warnOnce = false;
 
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java
index bd46679..770854a 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java
@@ -38,6 +38,7 @@ 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.IoTest;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryMapper;
 import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceEdge;
 import org.apache.tinkerpop.gremlin.structure.util.reference.ReferencePath;
 import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceProperty;
@@ -45,6 +46,7 @@ import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex;
 import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertexProperty;
 import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
 import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0;
+import org.apache.tinkerpop.shaded.kryo.Kryo;
 import org.hamcrest.CoreMatchers;
 import org.junit.After;
 import org.junit.Before;
@@ -76,22 +78,22 @@ public class GremlinResultSetIntegrateTest extends AbstractGremlinServerIntegrat
 
     @Parameterized.Parameters(name = "{0}")
     public static Iterable<Object[]> data() {
-        final MessageSerializer graphBinaryMessageSerializerV1 = new GraphBinaryMessageSerializerV1();
+        final MessageSerializer<GraphBinaryMapper> graphBinaryMessageSerializerV1 = new GraphBinaryMessageSerializerV1();
 
         // must configure Gryo with "custom" since it's configured on the server
-        final MessageSerializer gryoMessageSerializerV3d0 = new GryoMessageSerializerV3d0();
+        final MessageSerializer<Kryo> gryoMessageSerializerV3d0 = new GryoMessageSerializerV3d0();
         final Map<String,Object> gryoV3d0Config = new HashMap<>();
         gryoV3d0Config.put("ioRegistries", Collections.singletonList(TinkerIoRegistryV3d0.class.getName()));
         gryoV3d0Config.put("custom", Collections.singletonList("groovy.json.JsonBuilder;org.apache.tinkerpop.gremlin.driver.ser.JsonBuilderGryoSerializer"));
         gryoMessageSerializerV3d0.configure(gryoV3d0Config, null);
 
-        final MessageSerializer gryoMessageSerializerV1d0 = new GryoMessageSerializerV1d0();
+        final MessageSerializer<Kryo> gryoMessageSerializerV1d0 = new GryoMessageSerializerV1d0();
         final Map<String,Object> gryoV1d0Config = new HashMap<>();
         gryoV1d0Config.put("ioRegistries", Collections.singletonList(TinkerIoRegistryV3d0.class.getName()));
         gryoV1d0Config.put("custom", Collections.singletonList("groovy.json.JsonBuilder;org.apache.tinkerpop.gremlin.driver.ser.JsonBuilderGryoSerializer"));
         gryoMessageSerializerV1d0.configure(gryoV1d0Config, null);
 
-        final MessageSerializer gryoLiteMessageSerializerV1d0 = new GryoLiteMessageSerializerV1d0();
+        final MessageSerializer<Kryo> gryoLiteMessageSerializerV1d0 = new GryoLiteMessageSerializerV1d0();
         final Map<String,Object> gryoLiteV1d0Config = new HashMap<>();
         gryoLiteV1d0Config.put("ioRegistries", Collections.singletonList(TinkerIoRegistryV3d0.class.getName()));
         gryoLiteV1d0Config.put("custom", Collections.singletonList("groovy.json.JsonBuilder;org.apache.tinkerpop.gremlin.driver.ser.JsonBuilderGryoSerializer"));
@@ -109,7 +111,7 @@ public class GremlinResultSetIntegrateTest extends AbstractGremlinServerIntegrat
     public Serializers name;
 
     @Parameterized.Parameter(value = 1)
-    public MessageSerializer messageSerializer;
+    public MessageSerializer<?> messageSerializer;
 
     @Before
     public void beforeTest() {
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuthKrb5IntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuthKrb5IntegrateTest.java
index 1486c1b..4ec467e 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuthKrb5IntegrateTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuthKrb5IntegrateTest.java
@@ -231,7 +231,7 @@ public class GremlinServerAuthKrb5IntegrateTest extends AbstractGremlinServerInt
         assertAuthViaToStringWithSpecifiedSerializer(new GraphBinaryMessageSerializerV1());
     }
 
-    public void assertAuthViaToStringWithSpecifiedSerializer(final MessageSerializer serializer) throws InterruptedException, ExecutionException {
+    public void assertAuthViaToStringWithSpecifiedSerializer(final MessageSerializer<?> serializer) throws InterruptedException, ExecutionException {
         final Map<String,Object> config = new HashMap<>();
         config.put("serializeResultToString", true);
         serializer.configure(config, null);