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 2015/04/29 18:27:52 UTC

[4/4] incubator-tinkerpop git commit: Get rid of some object creation in serialization of a ResponseMessage.

Get rid of some object creation in serialization of a ResponseMessage.


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

Branch: refs/heads/master
Commit: 73221e62b19f89034b4d6341bddc61b3a01ef9e2
Parents: 8646e9e
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Apr 29 12:27:25 2015 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Apr 29 12:27:25 2015 -0400

----------------------------------------------------------------------
 .../ser/AbstractJsonMessageSerializerV1d0.java  | 74 ++++++++++++++------
 .../ser/JsonMessageSerializerGremlinV1d0.java   |  2 +-
 .../driver/ser/JsonMessageSerializerV1d0.java   |  2 +-
 3 files changed, 54 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/73221e62/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractJsonMessageSerializerV1d0.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractJsonMessageSerializerV1d0.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractJsonMessageSerializerV1d0.java
index 71f7f4c..9f3fe23 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractJsonMessageSerializerV1d0.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractJsonMessageSerializerV1d0.java
@@ -20,9 +20,11 @@ package org.apache.tinkerpop.gremlin.driver.ser;
 
 import com.fasterxml.jackson.core.JsonGenerationException;
 import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
 import com.fasterxml.jackson.databind.module.SimpleModule;
 import com.fasterxml.jackson.databind.ser.std.StdSerializer;
 import org.apache.tinkerpop.gremlin.driver.MessageSerializer;
@@ -36,6 +38,8 @@ import groovy.json.JsonBuilder;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.ByteBufAllocator;
 import io.netty.util.ReferenceCountUtil;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTokens;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -100,7 +104,7 @@ public abstract class AbstractJsonMessageSerializerV1d0 implements MessageSerial
     public ByteBuf serializeResponseAsBinary(final ResponseMessage responseMessage, final ByteBufAllocator allocator) throws SerializationException {
         ByteBuf encodedMessage = null;
         try {
-            final byte[] payload = mapper.writeValueAsBytes(createResponseMessageMap(responseMessage));
+            final byte[] payload = mapper.writeValueAsBytes(responseMessage);
             encodedMessage = allocator.buffer(payload.length);
             encodedMessage.writeBytes(payload);
 
@@ -166,31 +170,11 @@ public abstract class AbstractJsonMessageSerializerV1d0 implements MessageSerial
         }
     }
 
-    /**
-     * Construct a {@link Map} from the {@link ResponseMessage} for serialization purposes.  By doing it this way,
-     * type embedding does not become overly verbose in the core structure of the message.
-     */
-    protected static Map<String, Object> createResponseMessageMap(final ResponseMessage responseMessage) {
-        final Map<String, Object> result = new HashMap<>();
-        result.put(SerTokens.TOKEN_DATA, responseMessage.getResult().getData());
-        result.put(SerTokens.TOKEN_META, responseMessage.getResult().getMeta());
-
-        final Map<String, Object> status = new HashMap<>();
-        status.put(SerTokens.TOKEN_MESSAGE, responseMessage.getStatus().getMessage());
-        status.put(SerTokens.TOKEN_CODE, responseMessage.getStatus().getCode().getValue());
-        status.put(SerTokens.TOKEN_ATTRIBUTES, responseMessage.getStatus().getAttributes());
-
-        final Map<String, Object> message = new HashMap<>();
-        message.put(SerTokens.TOKEN_STATUS, status);
-        message.put(SerTokens.TOKEN_RESULT, result);
-        message.put(SerTokens.TOKEN_REQUEST, responseMessage.getRequestId() != null ? responseMessage.getRequestId() : null);
-        return message;
-    }
-
     public static class GremlinServerModule extends SimpleModule {
         public GremlinServerModule() {
             super("graphson-gremlin-server");
             addSerializer(JsonBuilder.class, new JsonBuilderJacksonSerializer());
+            addSerializer(ResponseMessage.class, new ResponseMessageSerializer());
         }
     }
 
@@ -209,4 +193,50 @@ public abstract class AbstractJsonMessageSerializerV1d0 implements MessageSerial
             jsonGenerator.writeRaw(",");
         }
     }
+
+    public static class ResponseMessageSerializer extends StdSerializer<ResponseMessage> {
+        public ResponseMessageSerializer() {
+            super(ResponseMessage.class);
+        }
+
+        @Override
+        public void serialize(final ResponseMessage responseMessage, final JsonGenerator jsonGenerator,
+                              final SerializerProvider serializerProvider) throws IOException, JsonGenerationException {
+            ser(responseMessage, jsonGenerator, serializerProvider, null);
+        }
+
+        @Override
+        public void serializeWithType(final ResponseMessage responseMessage, final JsonGenerator jsonGenerator,
+                                      final SerializerProvider serializerProvider,
+                                      final TypeSerializer typeSerializer) throws IOException, JsonProcessingException {
+            ser(responseMessage, jsonGenerator, serializerProvider, typeSerializer);
+        }
+
+        public void ser(final ResponseMessage responseMessage, final JsonGenerator jsonGenerator,
+                        final SerializerProvider serializerProvider,
+                        final TypeSerializer typeSerializer) throws IOException, JsonProcessingException {
+            jsonGenerator.writeStartObject();
+            if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+
+            jsonGenerator.writeStringField(SerTokens.TOKEN_REQUEST, responseMessage.getRequestId() != null ? responseMessage.getRequestId().toString() : null);
+            jsonGenerator.writeObjectFieldStart(SerTokens.TOKEN_STATUS);
+
+            if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+            jsonGenerator.writeStringField(SerTokens.TOKEN_MESSAGE, responseMessage.getStatus().getMessage());
+            jsonGenerator.writeNumberField(SerTokens.TOKEN_CODE, responseMessage.getStatus().getCode().getValue());
+            jsonGenerator.writeObjectField(SerTokens.TOKEN_ATTRIBUTES, responseMessage.getStatus().getAttributes());
+            jsonGenerator.writeEndObject();
+
+            jsonGenerator.writeObjectFieldStart(SerTokens.TOKEN_RESULT);
+            if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+            if (null == responseMessage.getResult().getData())
+                jsonGenerator.writeNullField(SerTokens.TOKEN_DATA);
+            else
+                GraphSONUtil.writeWithType(SerTokens.TOKEN_DATA, responseMessage.getResult().getData(), jsonGenerator, serializerProvider, typeSerializer);
+            jsonGenerator.writeObjectField(SerTokens.TOKEN_META, responseMessage.getResult().getMeta());
+            jsonGenerator.writeEndObject();
+
+            jsonGenerator.writeEndObject();
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/73221e62/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/JsonMessageSerializerGremlinV1d0.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/JsonMessageSerializerGremlinV1d0.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/JsonMessageSerializerGremlinV1d0.java
index 7c928e7..e11a70b 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/JsonMessageSerializerGremlinV1d0.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/JsonMessageSerializerGremlinV1d0.java
@@ -59,7 +59,7 @@ public class JsonMessageSerializerGremlinV1d0 extends AbstractJsonMessageSeriali
     }
 
     @Override
-    GraphSONMapper.Builder configureBuilder(GraphSONMapper.Builder builder) {
+    GraphSONMapper.Builder configureBuilder(final GraphSONMapper.Builder builder) {
         return builder.addCustomModule(new JsonMessageSerializerV1d0.GremlinServerModule())
                 .embedTypes(true);
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/73221e62/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/JsonMessageSerializerV1d0.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/JsonMessageSerializerV1d0.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/JsonMessageSerializerV1d0.java
index 21ef3cd..135e863 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/JsonMessageSerializerV1d0.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/JsonMessageSerializerV1d0.java
@@ -94,7 +94,7 @@ public class JsonMessageSerializerV1d0 extends AbstractJsonMessageSerializerV1d0
     @Override
     public String serializeResponseAsString(final ResponseMessage responseMessage) throws SerializationException {
         try {
-            return mapper.writeValueAsString(createResponseMessageMap(responseMessage));
+            return mapper.writeValueAsString(responseMessage);
         } catch (Exception ex) {
             logger.warn("Response [{}] could not be serialized by {}.", responseMessage.toString(), AbstractJsonMessageSerializerV1d0.class.getName());
             throw new RuntimeException("Error during serialization.", ex);