Repository: tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1278 95e08c24d -> f0d0302ee


Enabled bytecode to be represented as graphson string or Bytecode object in 
RequestMessage.

Ultimately, perhaps this should just be a GraphSON string as that will 
universally work across all languages. The problem with doing that right now is 
that without embedTypes(true) graphson won't work so well given that it is type 
lossy. I think we should just save that change for GraphSON 2.0.


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

Branch: refs/heads/TINKERPOP-1278
Commit: f0d0302ee0066f6ea2b9774b3c08887c905a4556
Parents: 95e08c2
Author: Stephen Mallette <[email protected]>
Authored: Mon Aug 15 15:39:24 2016 -0400
Committer: Stephen Mallette <[email protected]>
Committed: Mon Aug 15 15:39:24 2016 -0400

----------------------------------------------------------------------
 .../DefaultRemoteTraverserSerializers.java          | 16 +++++++++++++++-
 .../structure/io/graphson/GraphSONSerializers.java  |  1 +
 .../structure/io/graphson/GraphSONMapperTest.java   |  6 +++++-
 .../server/op/traversal/TraversalOpProcessor.java   |  9 ++++++++-
 4 files changed, 29 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f0d0302e/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/DefaultRemoteTraverserSerializers.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/DefaultRemoteTraverserSerializers.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/DefaultRemoteTraverserSerializers.java
index c5fd33e..2ff6cc6 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/DefaultRemoteTraverserSerializers.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/DefaultRemoteTraverserSerializers.java
@@ -19,12 +19,15 @@
 package org.apache.tinkerpop.gremlin.process.remote.traversal;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.structure.Property;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTokens;
 import org.apache.tinkerpop.gremlin.structure.io.gryo.kryoshim.InputShim;
 import org.apache.tinkerpop.gremlin.structure.io.gryo.kryoshim.KryoShim;
 import org.apache.tinkerpop.gremlin.structure.io.gryo.kryoshim.OutputShim;
 import org.apache.tinkerpop.gremlin.structure.io.gryo.kryoshim.SerializerShim;
 import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
 import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
 import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
 
 import java.io.IOException;
@@ -62,11 +65,22 @@ public final class DefaultRemoteTraverserSerializers {
         @Override
         public void serialize(final Traverser traverserInstance, final 
JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
                 throws IOException {
+            ser(traverserInstance, jsonGenerator, serializerProvider, null);
+        }
+
+        @Override
+        public void serializeWithType(final Traverser traverserInstance, final 
JsonGenerator jsonGenerator,
+                                      final SerializerProvider 
serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+            ser(traverserInstance, jsonGenerator, serializerProvider, 
typeSerializer);
+        }
+
+        private static void ser(final Traverser traverserInstance, final 
JsonGenerator jsonGenerator,
+                                final SerializerProvider serializerProvider, 
final TypeSerializer typeSerializer) throws IOException {
             jsonGenerator.writeStartObject();
+            if (typeSerializer != null) 
jsonGenerator.writeStringField(GraphSONTokens.CLASS, Traverser.class.getName());
             jsonGenerator.writeObjectField("bulk", traverserInstance.bulk());
             jsonGenerator.writeObjectField("value", traverserInstance.get());
             jsonGenerator.writeEndObject();
         }
-
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f0d0302e/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializers.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializers.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializers.java
index aaca316..974952c 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializers.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializers.java
@@ -95,6 +95,7 @@ final class GraphSONSerializers {
                 throws IOException {
             ser(property, jsonGenerator, serializerProvider, null);
         }
+
         @Override
         public void serializeWithType(final Property property, final 
JsonGenerator jsonGenerator,
                                       final SerializerProvider 
serializerProvider, final TypeSerializer typeSerializer) throws IOException {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f0d0302e/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
index 02c4b56..c872aab 100644
--- 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
+++ 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
@@ -36,6 +36,8 @@ import java.time.Year;
 import java.time.YearMonth;
 import java.time.ZoneOffset;
 import java.time.ZonedDateTime;
+import java.util.HashMap;
+import java.util.Map;
 
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.__;
 import static org.junit.Assert.assertEquals;
@@ -145,6 +147,8 @@ public class GraphSONMapperTest {
     public void shouldHandleDefaultRemoteTraverser() throws Exception {
         final DefaultRemoteTraverser<String> traverser = new 
DefaultRemoteTraverser<>("test", 100);
         final String json = mapper.writeValueAsString(traverser);
-        // TODO: ASSERTION~~
+        final Map<String,Object> m = mapper.readValue(json, HashMap.class);
+        assertEquals("test", m.get("value"));
+        assertEquals(100, m.get("bulk"));
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f0d0302e/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
----------------------------------------------------------------------
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 a8facbf..b041a32 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
@@ -46,6 +46,7 @@ import 
org.apache.tinkerpop.gremlin.server.util.TraversalIterator;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper;
 import org.apache.tinkerpop.gremlin.util.function.ThrowingConsumer;
+import org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -68,6 +69,7 @@ import static com.codahale.metrics.MetricRegistry.name;
  */
 public class TraversalOpProcessor extends AbstractOpProcessor {
     private static final Logger logger = 
LoggerFactory.getLogger(TraversalOpProcessor.class);
+    private static final ObjectMapper mapper = 
GraphSONMapper.build().create().createMapper();
     public static final String OP_PROCESSOR_NAME = "traversal";
     public static final Timer traversalOpTimer = 
MetricManager.INSTANCE.getTimer(name(GremlinServer.class, "op", "traversal"));
 
@@ -312,7 +314,12 @@ public class TraversalOpProcessor extends 
AbstractOpProcessor {
         final RequestMessage msg = context.getRequestMessage();
         logger.debug("Traversal request {} for in thread {}", 
msg.getRequestId(), Thread.currentThread().getName());
 
-        final Bytecode bytecode = 
GraphSONMapper.build().create().createMapper().readValue(msg.getArgs().get(Tokens.ARGS_GREMLIN).toString(),
 Bytecode.class);
+        // TODO: Look to polish this up in GraphSON 2.0 when we don't have 
type lossiness anymore
+        // right now the TraversalOpPorcessor can take a direct GraphSON 
representation of Bytecode or directly take
+        // deserialized Bytecode object.
+        final Object bytecodeObj = msg.getArgs().get(Tokens.ARGS_GREMLIN);
+        final Bytecode bytecode = bytecodeObj instanceof Bytecode ? (Bytecode) 
bytecodeObj :
+            mapper.readValue(bytecodeObj.toString(), Bytecode.class);
 
         // earlier validation in selection of this op method should free us to 
cast this without worry
         final Map<String, String> aliases = (Map<String, String>) 
msg.optionalArgs(Tokens.ARGS_ALIASES).get();

Reply via email to