You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2016/08/23 16:50:56 UTC

tinkerpop git commit: stuck in a total GraphSON hole. I can't register Operator enum without everything breaking. This commit is up to Operator serialization not working -- everyhing else is fine.

Repository: tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1278 e6f4cfdf9 -> e4c750d2a


stuck in a total GraphSON hole. I can't register Operator enum without everything breaking. This commit is up to Operator serialization not working -- everyhing else is fine.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/e4c750d2
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/e4c750d2
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/e4c750d2

Branch: refs/heads/TINKERPOP-1278
Commit: e4c750d2a7f18e70f155e70e68832be8b7c622a2
Parents: e6f4cfd
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Aug 23 10:50:50 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Aug 23 10:50:50 2016 -0600

----------------------------------------------------------------------
 .../structure/io/graphson/GraphSONModule.java   |  59 +++--
 .../structure/io/graphson/GraphSONTokens.java   |  12 +-
 .../GraphSONTraversalSerializersV2d0.java       | 245 +++++++------------
 .../process/traversal/step/filter/IsTest.java   |   4 +-
 .../io/graphson/GraphSONTranslator.java         |   6 +-
 5 files changed, 143 insertions(+), 183 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e4c750d2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
index 21a48f3..c40af5c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
@@ -29,7 +29,9 @@ import org.apache.tinkerpop.gremlin.process.traversal.Scope;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
+import org.apache.tinkerpop.gremlin.process.traversal.util.AndP;
 import org.apache.tinkerpop.gremlin.process.traversal.util.Metrics;
+import org.apache.tinkerpop.gremlin.process.traversal.util.OrP;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalExplanation;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMetrics;
 import org.apache.tinkerpop.gremlin.structure.Column;
@@ -60,6 +62,7 @@ import java.time.ZoneOffset;
 import java.time.ZonedDateTime;
 import java.util.LinkedHashMap;
 import java.util.Map;
+import java.util.stream.Stream;
 
 /**
  * The set of serializers that handle the core graph interfaces.  These serializers support normalization which
@@ -117,6 +120,21 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
             put(TraversalMetrics.class, "traversalmetrics");
             put(Traverser.class, "traverser");
             put(Tree.class, "tree");
+            put(Bytecode.class, "bytecode");
+            put(Bytecode.Binding.class, "binding");
+            put(AndP.class, "P");
+            put(OrP.class, "P");
+            put(P.class, "P");
+            Stream.of(
+                    VertexProperty.Cardinality.values(),
+                    Column.values(),
+                    Direction.values(),
+                    // Operator.values(),
+                    Order.values(),
+                    Pop.values(),
+                    SackFunctions.Barrier.values(),
+                    Scope.values(),
+                    T.values()).flatMap(Stream::of).forEach(e -> put(e.getClass(), e.getDeclaringClass().getSimpleName()));
         }};
 
         /**
@@ -165,15 +183,15 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
             // TODO: review (added for integration with new GraphSON model for GLV bytecode)
             addSerializer(Traversal.class, new GraphSONTraversalSerializersV2d0.TraversalJacksonSerializer());
             addSerializer(Bytecode.class, new GraphSONTraversalSerializersV2d0.BytecodeJacksonSerializer());
-            addSerializer(VertexProperty.Cardinality.class, new GraphSONTraversalSerializersV2d0.EnumJacksonSerializer());
-            addSerializer(Column.class, new GraphSONTraversalSerializersV2d0.EnumJacksonSerializer());
-            addSerializer(Direction.class, new GraphSONTraversalSerializersV2d0.EnumJacksonSerializer());
-            addSerializer(SackFunctions.Barrier.class, new GraphSONTraversalSerializersV2d0.EnumJacksonSerializer());
-            addSerializer(Operator.class, new GraphSONTraversalSerializersV2d0.EnumJacksonSerializer());
-            addSerializer(Order.class, new GraphSONTraversalSerializersV2d0.EnumJacksonSerializer());
-            addSerializer(Pop.class, new GraphSONTraversalSerializersV2d0.EnumJacksonSerializer());
-            addSerializer(Scope.class, new GraphSONTraversalSerializersV2d0.EnumJacksonSerializer());
-            addSerializer(T.class, new GraphSONTraversalSerializersV2d0.EnumJacksonSerializer());
+            Stream.of(VertexProperty.Cardinality.values(),
+                    Column.values(),
+                    //Operator.values(),
+                    Direction.values(),
+                    Order.values(),
+                    Pop.values(),
+                    SackFunctions.Barrier.values(),
+                    Scope.values(),
+                    T.values()).flatMap(Stream::of).forEach(e -> addSerializer(e.getClass(), new GraphSONTraversalSerializersV2d0.EnumJacksonSerializer()));
             addSerializer(P.class, new GraphSONTraversalSerializersV2d0.PJacksonSerializer());
             addSerializer(Lambda.class, new GraphSONTraversalSerializersV2d0.LambdaJacksonSerializer());
             addSerializer(Bytecode.Binding.class, new GraphSONTraversalSerializersV2d0.BindingJacksonSerializer());
@@ -208,10 +226,18 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
 
             // traversal
             addDeserializer(Bytecode.class, new GraphSONTraversalSerializersV2d0.BytecodeJacksonDeserializer());
-            addDeserializer(Enum.class, new GraphSONTraversalSerializersV2d0.EnumJacksonDeserializer());
+            addDeserializer(Bytecode.Binding.class, new GraphSONTraversalSerializersV2d0.BindingJacksonDeserializer());
+            Stream.of(VertexProperty.Cardinality.values(),
+                    Column.values(),
+                    Direction.values(),
+                    //Operator.values(),
+                    Order.values(),
+                    Pop.values(),
+                    SackFunctions.Barrier.values(),
+                    Scope.values(),
+                    T.values()).flatMap(Stream::of).forEach(e -> addDeserializer(e.getClass(), new GraphSONTraversalSerializersV2d0.EnumJacksonDeserializer(e)));
             addDeserializer(P.class, new GraphSONTraversalSerializersV2d0.PJacksonDeserializer());
             addDeserializer(Lambda.class, new GraphSONTraversalSerializersV2d0.LambdaJacksonDeserializer());
-            addDeserializer(Bytecode.Binding.class, new GraphSONTraversalSerializersV2d0.BindingJacksonDeserializer());
             addDeserializer(Traverser.class, new GraphSONTraversalSerializersV2d0.TraverserJacksonDeserializer());
         }
 
@@ -231,7 +257,8 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
 
         static final class Builder implements GraphSONModuleBuilder {
 
-            private Builder() {}
+            private Builder() {
+            }
 
             @Override
             public GraphSONModule create(final boolean normalize) {
@@ -261,7 +288,7 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
             addSerializer(Path.class, new GraphSONSerializersV1d0.PathJacksonSerializer());
             addSerializer(DirectionalStarGraph.class, new StarGraphGraphSONSerializerV1d0(normalize));
             addSerializer(Tree.class, new GraphSONSerializersV1d0.TreeJacksonSerializer());
-           
+
             // java.util
             addSerializer(Map.Entry.class, new JavaUtilSerializersV1d0.MapEntryJacksonSerializer());
 
@@ -296,7 +323,7 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
 
             // traversal
             // TODO: review (added for integration with new GraphSON model for GLV bytecode)
-            addSerializer(Traversal.class, new GraphSONTraversalSerializersV2d0.TraversalJacksonSerializer());
+            /*addSerializer(Traversal.class, new GraphSONTraversalSerializersV2d0.TraversalJacksonSerializer());
             addSerializer(Bytecode.class, new GraphSONTraversalSerializersV2d0.BytecodeJacksonSerializer());
             addSerializer(VertexProperty.Cardinality.class, new GraphSONTraversalSerializersV2d0.EnumJacksonSerializer());
             addSerializer(Column.class, new GraphSONTraversalSerializersV2d0.EnumJacksonSerializer());
@@ -310,10 +337,10 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
             addSerializer(P.class, new GraphSONTraversalSerializersV2d0.PJacksonSerializer());
             addSerializer(Lambda.class, new GraphSONTraversalSerializersV2d0.LambdaJacksonSerializer());
             addSerializer(Bytecode.Binding.class, new GraphSONTraversalSerializersV2d0.BindingJacksonSerializer());
-            addSerializer(Traverser.class, new GraphSONTraversalSerializersV2d0.TraverserSerializer());
+            addSerializer(Traverser.class, new GraphSONTraversalSerializersV2d0.TraverserSerializer());*/
             // -- deserializers for traversal
             addDeserializer(Bytecode.class, new GraphSONTraversalSerializersV2d0.BytecodeJacksonDeserializer());
-            addDeserializer(Enum.class, new GraphSONTraversalSerializersV2d0.EnumJacksonDeserializer());
+            //addDeserializer(Enum.class, new GraphSONTraversalSerializersV2d0.EnumJacksonDeserializer());
             addDeserializer(P.class, new GraphSONTraversalSerializersV2d0.PJacksonDeserializer());
             addDeserializer(Lambda.class, new GraphSONTraversalSerializersV2d0.LambdaJacksonDeserializer());
             addDeserializer(Bytecode.Binding.class, new GraphSONTraversalSerializersV2d0.BindingJacksonDeserializer());

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e4c750d2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java
index 6833d11..7a50b63 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java
@@ -23,7 +23,8 @@ package org.apache.tinkerpop.gremlin.structure.io.graphson;
  */
 public final class GraphSONTokens {
 
-    private GraphSONTokens() {}
+    private GraphSONTokens() {
+    }
 
     public static final String CLASS = "@class";
     public static final String VALUETYPE = "@type";
@@ -64,4 +65,13 @@ public final class GraphSONTokens {
     public static final String ANNOTATIONS = "annotations";
 
     public static final String BULK = "bulk";
+
+    public static final String SCRIPT = "script";
+    public static final String LANGUAGE = "language";
+    public static final String ARGUMENTS = "arguments";
+    public static final String PREDICATE = "predicate";
+    public static final String AND = "and";
+    public static final String OR = "or";
+    public static final String SOURCE = "source";
+    public static final String STEP = "step";
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e4c750d2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTraversalSerializersV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTraversalSerializersV2d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTraversalSerializersV2d0.java
index d768d8e..0741b05 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTraversalSerializersV2d0.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTraversalSerializersV2d0.java
@@ -21,37 +21,24 @@ package org.apache.tinkerpop.gremlin.structure.io.graphson;
 
 import org.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser;
 import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
-import org.apache.tinkerpop.gremlin.process.traversal.Operator;
-import org.apache.tinkerpop.gremlin.process.traversal.Order;
 import org.apache.tinkerpop.gremlin.process.traversal.P;
-import org.apache.tinkerpop.gremlin.process.traversal.Pop;
-import org.apache.tinkerpop.gremlin.process.traversal.SackFunctions;
-import org.apache.tinkerpop.gremlin.process.traversal.Scope;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.util.AndP;
 import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
 import org.apache.tinkerpop.gremlin.process.traversal.util.OrP;
-import org.apache.tinkerpop.gremlin.structure.Column;
-import org.apache.tinkerpop.gremlin.structure.Direction;
-import org.apache.tinkerpop.gremlin.structure.T;
-import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.apache.tinkerpop.gremlin.util.function.Lambda;
 import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
 import org.apache.tinkerpop.shaded.jackson.core.JsonParser;
 import org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException;
-import org.apache.tinkerpop.shaded.jackson.core.ObjectCodec;
 import org.apache.tinkerpop.shaded.jackson.databind.DeserializationContext;
-import org.apache.tinkerpop.shaded.jackson.databind.JsonNode;
 import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
 import org.apache.tinkerpop.shaded.jackson.databind.deser.std.StdDeserializer;
-import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
-import org.apache.tinkerpop.shaded.jackson.databind.node.JsonNodeType;
 import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdScalarSerializer;
 import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
 
 import java.io.IOException;
-import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -82,7 +69,7 @@ final class GraphSONTraversalSerializersV2d0 {
 
     }
 
-    final static class BytecodeJacksonSerializer extends StdSerializer<Bytecode> {
+    final static class BytecodeJacksonSerializer extends StdScalarSerializer<Bytecode> {
 
         public BytecodeJacksonSerializer() {
             super(Bytecode.class);
@@ -92,9 +79,8 @@ final class GraphSONTraversalSerializersV2d0 {
         public void serialize(final Bytecode bytecode, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
                 throws IOException {
             jsonGenerator.writeStartObject();
-            jsonGenerator.writeStringField(GraphSONTokens.VALUETYPE, "Bytecode");
             if (bytecode.getSourceInstructions().iterator().hasNext()) {
-                jsonGenerator.writeArrayFieldStart("source");
+                jsonGenerator.writeArrayFieldStart(GraphSONTokens.SOURCE);
                 for (final Bytecode.Instruction instruction : bytecode.getSourceInstructions()) {
                     jsonGenerator.writeStartArray();
                     jsonGenerator.writeString(instruction.getOperator());
@@ -106,7 +92,7 @@ final class GraphSONTraversalSerializersV2d0 {
                 jsonGenerator.writeEndArray();
             }
             if (bytecode.getStepInstructions().iterator().hasNext()) {
-                jsonGenerator.writeArrayFieldStart("step");
+                jsonGenerator.writeArrayFieldStart(GraphSONTokens.STEP);
                 for (final Bytecode.Instruction instruction : bytecode.getStepInstructions()) {
                     jsonGenerator.writeStartArray();
                     jsonGenerator.writeString(instruction.getOperator());
@@ -122,7 +108,7 @@ final class GraphSONTraversalSerializersV2d0 {
         }
     }
 
-    final static class EnumJacksonSerializer extends StdSerializer<Enum> {
+    static class EnumJacksonSerializer extends StdScalarSerializer<Enum> {
 
         public EnumJacksonSerializer() {
             super(Enum.class);
@@ -131,15 +117,12 @@ final class GraphSONTraversalSerializersV2d0 {
         @Override
         public void serialize(final Enum enumInstance, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
                 throws IOException {
-            jsonGenerator.writeStartObject();
-            jsonGenerator.writeObjectField(GraphSONTokens.VALUETYPE, enumInstance.getDeclaringClass().getSimpleName());
-            jsonGenerator.writeObjectField(GraphSONTokens.VALUE, enumInstance.name());
-            jsonGenerator.writeEndObject();
+            jsonGenerator.writeString(enumInstance.name());
         }
 
     }
 
-    final static class PJacksonSerializer extends StdSerializer<P> {
+    final static class PJacksonSerializer extends StdScalarSerializer<P> {
 
         public PJacksonSerializer() {
             super(P.class);
@@ -149,15 +132,34 @@ final class GraphSONTraversalSerializersV2d0 {
         public void serialize(final P p, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
                 throws IOException {
             jsonGenerator.writeStartObject();
-            jsonGenerator.writeStringField(GraphSONTokens.VALUETYPE, "P");
-            jsonGenerator.writeStringField("predicate", p instanceof ConnectiveP ? p instanceof AndP ? "and" : "or" : p.getBiPredicate().toString());
-            jsonGenerator.writeObjectField(GraphSONTokens.VALUE, p instanceof ConnectiveP ? ((ConnectiveP) p).getPredicates() : p.getValue());
+            jsonGenerator.writeStringField(GraphSONTokens.PREDICATE,
+                    p instanceof ConnectiveP ?
+                            p instanceof AndP ?
+                                    GraphSONTokens.AND :
+                                    GraphSONTokens.OR :
+                            p.getBiPredicate().toString());
+            if (p instanceof ConnectiveP) {
+                jsonGenerator.writeArrayFieldStart(GraphSONTokens.VALUE);
+                for (final P<?> predicate : ((ConnectiveP<?>) p).getPredicates()) {
+                    jsonGenerator.writeObject(predicate);
+                }
+                jsonGenerator.writeEndArray();
+            } else {
+                if (p.getValue() instanceof Collection) {
+                    jsonGenerator.writeArrayFieldStart(GraphSONTokens.VALUE);
+                    for (final Object object : (Collection) p.getValue()) {
+                        jsonGenerator.writeObject(object);
+                    }
+                    jsonGenerator.writeEndArray();
+                } else
+                    jsonGenerator.writeObjectField(GraphSONTokens.VALUE, p.getValue());
+            }
             jsonGenerator.writeEndObject();
         }
 
     }
 
-    final static class LambdaJacksonSerializer extends StdSerializer<Lambda> {
+    final static class LambdaJacksonSerializer extends StdScalarSerializer<Lambda> {
 
         public LambdaJacksonSerializer() {
             super(Lambda.class);
@@ -167,16 +169,15 @@ final class GraphSONTraversalSerializersV2d0 {
         public void serialize(final Lambda lambda, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
                 throws IOException {
             jsonGenerator.writeStartObject();
-            jsonGenerator.writeStringField(GraphSONTokens.VALUETYPE, "Lambda");
-            jsonGenerator.writeStringField(GraphSONTokens.VALUE, lambda.getLambdaScript());
-            jsonGenerator.writeStringField("language", lambda.getLambdaLanguage());
-            jsonGenerator.writeNumberField("arguments", lambda.getLambdaArguments());
+            jsonGenerator.writeStringField(GraphSONTokens.SCRIPT, lambda.getLambdaScript());
+            jsonGenerator.writeStringField(GraphSONTokens.LANGUAGE, lambda.getLambdaLanguage());
+            jsonGenerator.writeNumberField(GraphSONTokens.ARGUMENTS, lambda.getLambdaArguments());
             jsonGenerator.writeEndObject();
         }
 
     }
 
-    final static class BindingJacksonSerializer extends StdSerializer<Bytecode.Binding> {
+    final static class BindingJacksonSerializer extends StdScalarSerializer<Bytecode.Binding> {
 
         public BindingJacksonSerializer() {
             super(Bytecode.Binding.class);
@@ -186,8 +187,7 @@ final class GraphSONTraversalSerializersV2d0 {
         public void serialize(final Bytecode.Binding binding, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
                 throws IOException {
             jsonGenerator.writeStartObject();
-            jsonGenerator.writeStringField(GraphSONTokens.VALUETYPE, "Binding");
-            jsonGenerator.writeStringField("variable", binding.variable());
+            jsonGenerator.writeStringField(GraphSONTokens.KEY, binding.variable());
             jsonGenerator.writeObjectField(GraphSONTokens.VALUE, binding.value());
             jsonGenerator.writeEndObject();
         }
@@ -214,185 +214,106 @@ final class GraphSONTraversalSerializersV2d0 {
     // DESERIALIZERS //
     //////////////////
 
-    final static class BytecodeJacksonDeserializer extends StdDeserializer<Bytecode> {
+    final static class BytecodeJacksonDeserializer extends AbstractObjectDeserializer<Bytecode> {
 
         public BytecodeJacksonDeserializer() {
             super(Bytecode.class);
         }
 
-        private static void processInstruction(final JsonNode instruction, final ObjectCodec oc, final Bytecode bytecode, final boolean source) throws IOException {
-            final String operator = instruction.get(0).textValue();
-            final List<Object> arguments = new ArrayList<>();
-            for (int j = 1; j < instruction.size(); j++) {
-                final JsonNode argument = instruction.get(j);
-                if (argument.getNodeType().equals(JsonNodeType.OBJECT)) {
-                    if (argument.has(GraphSONTokens.VALUETYPE)) {
-                        final String type = argument.get(GraphSONTokens.VALUETYPE).textValue();
-                        if (type.equals("Bytecode"))
-                            arguments.add(oc.readValue(argument.traverse(oc), Bytecode.class));
-                        else if (type.equals("Binding"))
-                            arguments.add(oc.readValue(argument.traverse(oc), Bytecode.Binding.class));
-                        else if (type.equals("P"))
-                            arguments.add(oc.readValue(argument.traverse(oc), P.class));
-                        else if (type.equals("Lambda"))
-                            arguments.add(oc.readValue(argument.traverse(oc), Lambda.class));
-                        else
-                            arguments.add(oc.readValue(argument.traverse(oc), Enum.class));
-                    } else {
-                        arguments.add(oc.readValue(argument.traverse(oc), Object.class)); // TODO: vertices/edges/etc. don't get processed correctly
-                    }
-                } else if (argument.getNodeType().equals(JsonNodeType.NUMBER)) {
-                    arguments.add(argument.asInt()); // TODO
-                } else if (argument.getNodeType().equals(JsonNodeType.STRING)) {
-                    arguments.add(argument.textValue());
-                } else if (argument.getNodeType().equals(JsonNodeType.BOOLEAN)) {
-                    arguments.add(argument.booleanValue());
-                } else if (argument.getNodeType().equals(JsonNodeType.ARRAY)) {
-                    final List<Object> list = new ArrayList<>();
-                    for (int k = 0; k < argument.size(); k++) {
-                        list.add(oc.readValue(argument.get(k).traverse(oc), Object.class));
-                        //list.add(argument.get(k).textValue());
-                    }
-                    arguments.add(list);
-                } else {
-                    throw new IOException("Unknown argument: " + argument);
-                }
-            }
-            if (source)
-                bytecode.addSource(operator, arguments.toArray());
-            else
-                bytecode.addStep(operator, arguments.toArray());
-        }
-
         @Override
-        public Bytecode deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+        Bytecode createObject(final Map<String, Object> data) {
             final Bytecode bytecode = new Bytecode();
-            final ObjectCodec oc = jsonParser.getCodec();
-            final JsonNode node = oc.readTree(jsonParser);
-            assert node.get(GraphSONTokens.VALUETYPE).textValue().equals("Bytecode");
-            if (node.has("source")) {
-                final JsonNode source = node.get("source");
-                for (int i = 0; i < source.size(); i++) {
-                    processInstruction(source.get(i), oc, bytecode, true);
+            if (data.containsKey(GraphSONTokens.SOURCE)) {
+                final List<List<Object>> instructions = (List) data.get(GraphSONTokens.SOURCE);
+                for (final List<Object> instruction : instructions) {
+                    bytecode.addSource((String) instruction.get(0), Arrays.copyOfRange(instruction.toArray(), 1, instruction.size()));
                 }
             }
-            if (node.has("step")) {
-                final JsonNode step = node.get("step");
-                for (int i = 0; i < step.size(); i++) {
-                    processInstruction(step.get(i), oc, bytecode, false);
-
+            if (data.containsKey(GraphSONTokens.STEP)) {
+                final List<List<Object>> instructions = (List) data.get(GraphSONTokens.STEP);
+                for (final List<Object> instruction : instructions) {
+                    bytecode.addStep((String) instruction.get(0), Arrays.copyOfRange(instruction.toArray(), 1, instruction.size()));
                 }
             }
             return bytecode;
         }
     }
 
-    final static class EnumJacksonDeserializer extends StdDeserializer<Enum> {
+    final static class EnumJacksonDeserializer<A extends Enum> extends StdDeserializer<A> {
 
-        public EnumJacksonDeserializer() {
-            super(Enum.class);
+
+        public EnumJacksonDeserializer(final A enumInstance) {
+            super(enumInstance.getDeclaringClass());
         }
 
         @Override
-        public Enum deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
-
-            final ObjectCodec oc = jsonParser.getCodec();
-            final JsonNode node = oc.readTree(jsonParser);
-            final String type = node.get(GraphSONTokens.VALUETYPE).textValue();
-            if (type.equals("Cardinality"))
-                return VertexProperty.Cardinality.valueOf(node.get(GraphSONTokens.VALUE).textValue());
-            else if (type.equals("Column"))
-                return Column.valueOf(node.get(GraphSONTokens.VALUE).textValue());
-            else if (type.equals("Direction"))
-                return Direction.valueOf(node.get(GraphSONTokens.VALUE).textValue());
-            else if (type.equals("Barrier"))
-                return SackFunctions.Barrier.valueOf(node.get(GraphSONTokens.VALUE).textValue());
-            else if (type.equals("Operator"))
-                return Operator.valueOf(node.get(GraphSONTokens.VALUE).textValue());
-            else if (type.equals("Order"))
-                return Order.valueOf(node.get(GraphSONTokens.VALUE).textValue());
-            else if (type.equals("Pop"))
-                return Pop.valueOf(node.get(GraphSONTokens.VALUE).textValue());
-            else if (type.equals("Scope"))
-                return Scope.valueOf(node.get(GraphSONTokens.VALUE).textValue());
-            else if (type.equals("T"))
-                return T.valueOf(node.get(GraphSONTokens.VALUE).textValue());
-            else
-                throw new IOException("Unknown enum type: " + type);
-
+        public A deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+            final Class<A> enumClass = (Class<A>) this._valueClass;
+            final String enumName = jsonParser.getText();
+            for (final Enum a : enumClass.getEnumConstants()) {
+                if (a.name().equals(enumName))
+                    return (A) a;
+            }
+            throw new IOException("Unknown enum type: " + enumClass);
         }
+
+
     }
 
-    final static class PJacksonDeserializer extends StdDeserializer<P> {
+    final static class PJacksonDeserializer extends AbstractObjectDeserializer<P> {
 
         public PJacksonDeserializer() {
             super(P.class);
         }
 
         @Override
-        public P deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
-
-            final ObjectCodec oc = jsonParser.getCodec();
-            final JsonNode node = oc.readTree(jsonParser);
-            assert node.get(GraphSONTokens.VALUETYPE).textValue().equals("P");
-            final JsonNode predicate = node.get("predicate");
-            if (predicate.textValue().equals("and") || predicate.textValue().equals("or")) {
-                final List<P<?>> arguments = new ArrayList<>();
-                for (int i = 0; i < node.get(GraphSONTokens.VALUE).size(); i++) {
-                    arguments.add(oc.readValue(node.get(GraphSONTokens.VALUE).get(i).traverse(oc), P.class));
-                }
-                return predicate.textValue().equals("and") ? new AndP(arguments) : new OrP(arguments);
+        P createObject(final Map<String, Object> data) {
+            final String predicate = (String) data.get(GraphSONTokens.PREDICATE);
+            final Object value = data.get(GraphSONTokens.VALUE);
+            if (predicate.equals(GraphSONTokens.AND) || predicate.equals(GraphSONTokens.OR)) {
+                return predicate.equals(GraphSONTokens.AND) ? new AndP((List<P>) value) : new OrP((List<P>) value);
             } else {
                 try {
-                    final Object argument = oc.readValue(node.get(GraphSONTokens.VALUE).traverse(oc), Object.class);
-                    return (P) P.class.getMethod(predicate.textValue(), argument instanceof Collection ? Collection.class : Object.class).invoke(null, argument); // TODO: number stuff, eh?
+                    return (P) P.class.getMethod(predicate, value instanceof Collection ? Collection.class : Object.class).invoke(null, value); // TODO: number stuff, eh?
                 } catch (final Exception e) {
-                    throw new IOException(e.getMessage(), e);
+                    throw new IllegalStateException(e.getMessage(), e);
                 }
             }
         }
     }
 
-    final static class LambdaJacksonDeserializer extends StdDeserializer<Lambda> {
+    final static class LambdaJacksonDeserializer extends AbstractObjectDeserializer<Lambda> {
 
         public LambdaJacksonDeserializer() {
             super(Lambda.class);
         }
 
         @Override
-        public Lambda deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
-
-            final ObjectCodec oc = jsonParser.getCodec();
-            final JsonNode node = oc.readTree(jsonParser);
-            assert node.get(GraphSONTokens.VALUETYPE).textValue().equals("Lambda");
-            final String lambdaScript = node.get(GraphSONTokens.VALUE).textValue();
-            final String lambdaLanguage = node.get("language").textValue();
-            final int lambdaArguments = node.get("arguments").intValue();
-            if (-1 == lambdaArguments || lambdaArguments > 2)
-                return new Lambda.UnknownArgLambda(lambdaScript, lambdaLanguage, lambdaArguments);
-            else if (0 == lambdaArguments)
-                return new Lambda.ZeroArgLambda<>(lambdaScript, lambdaLanguage);
-            else if (1 == lambdaArguments)
-                return new Lambda.OneArgLambda<>(lambdaScript, lambdaLanguage);
+        Lambda createObject(final Map<String, Object> data) {
+            final String script = (String) data.get(GraphSONTokens.SCRIPT);
+            final String language = (String) data.get(GraphSONTokens.LANGUAGE);
+            final int arguments = ((Number) data.getOrDefault(GraphSONTokens.ARGUMENTS, -1)).intValue();
+            //
+            if (-1 == arguments || arguments > 2)
+                return new Lambda.UnknownArgLambda(script, language, arguments);
+            else if (0 == arguments)
+                return new Lambda.ZeroArgLambda<>(script, language);
+            else if (1 == arguments)
+                return new Lambda.OneArgLambda<>(script, language);
             else
-                return new Lambda.TwoArgLambda<>(lambdaScript, lambdaLanguage);
+                return new Lambda.TwoArgLambda<>(script, language);
         }
     }
 
-    final static class BindingJacksonDeserializer extends StdDeserializer<Bytecode.Binding> {
+    final static class BindingJacksonDeserializer extends AbstractObjectDeserializer<Bytecode.Binding> {
 
         public BindingJacksonDeserializer() {
             super(Bytecode.Binding.class);
         }
 
         @Override
-        public Bytecode.Binding deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
-            final ObjectCodec oc = jsonParser.getCodec();
-            final JsonNode node = oc.readTree(jsonParser);
-            assert node.get(GraphSONTokens.VALUETYPE).textValue().equals("Binding");
-            final String variable = node.get("variable").textValue();
-            final Object value = oc.readValue(node.get(GraphSONTokens.VALUE).traverse(oc), Object.class);
-            return new Bytecode.Binding<>(variable, value);
+        Bytecode.Binding createObject(final Map<String, Object> data) {
+            return new Bytecode.Binding<>((String) data.get(GraphSONTokens.KEY), data.get(GraphSONTokens.VALUE));
         }
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e4c750d2/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/IsTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/IsTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/IsTest.java
index 931a1a2..56bdcfa 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/IsTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/IsTest.java
@@ -77,7 +77,7 @@ public abstract class IsTest extends AbstractGremlinProcessTest {
 
     @Test
     @LoadGraphWith(MODERN)
-    public void g_V_hasXinXcreatedX_count_isX1XX_valuesXnameX() {
+    public void g_V_whereXinXcreatedX_count_isX1XX_valuesXnameX() {
         final Traversal<Vertex, String> traversal = get_g_V_whereXinXcreatedX_count_isX1XX_valuesXnameX();
         printTraversalForm(traversal);
         assertTrue(traversal.hasNext());
@@ -87,7 +87,7 @@ public abstract class IsTest extends AbstractGremlinProcessTest {
 
     @Test
     @LoadGraphWith(MODERN)
-    public void g_V_hasXinXcreatedX_count_isXgte_2XX_valuesXnameX() {
+    public void g_V_whereXinXcreatedX_count_isXgte_2XX_valuesXnameX() {
         final Traversal<Vertex, String> traversal = get_g_V_whereXinXcreatedX_count_isXgte_2XX_valuesXnameX();
         printTraversalForm(traversal);
         assertTrue(traversal.hasNext());

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e4c750d2/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/GraphSONTranslator.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/GraphSONTranslator.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/GraphSONTranslator.java
index 5b63082..d113475 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/GraphSONTranslator.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/GraphSONTranslator.java
@@ -25,7 +25,9 @@ import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
 import org.apache.tinkerpop.gremlin.process.traversal.util.BytecodeHelper;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONReader;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONVersion;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONWriter;
 
 import java.io.ByteArrayInputStream;
@@ -37,8 +39,8 @@ import java.io.ByteArrayOutputStream;
 final class GraphSONTranslator<S extends TraversalSource, T extends Traversal.Admin<?, ?>> implements Translator.StepTranslator<S, T> {
 
     private final JavaTranslator<S, T> wrappedTranslator;
-    private final GraphSONWriter writer = GraphSONWriter.build().create();
-    private final GraphSONReader reader = GraphSONReader.build().create();
+    private final GraphSONWriter writer = GraphSONWriter.build().mapper(GraphSONMapper.build().version(GraphSONVersion.V2_0).create()).create();
+    private final GraphSONReader reader = GraphSONReader.build().mapper(GraphSONMapper.build().version(GraphSONVersion.V2_0).create()).create();
 
     public GraphSONTranslator(final JavaTranslator<S, T> wrappedTranslator) {
         this.wrappedTranslator = wrappedTranslator;