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

valentyn pushed a commit to branch valentyn/update-response-format
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit 6f8d3a1c96e959c6ee0b77e7e9310e44d46b5dd5
Author: Valentyn Kahamlyk <valentyn.kaham...@improving.com>
AuthorDate: Tue Apr 16 18:10:27 2024 -0700

    initial implementation
---
 .../gremlin/util/message/ResponseMessage.java      | 31 +++++++++------
 .../gremlin/util/message/ResponseStatus.java       | 19 +++++++++-
 .../ser/AbstractGraphSONMessageSerializerV4.java   |  7 ++--
 .../util/ser/GraphBinaryMessageSerializerV4.java   | 33 +++++++---------
 .../tinkerpop/gremlin/util/ser/SerTokens.java      |  1 +
 .../util/ser/GraphSONMessageSerializerV4Test.java  | 44 ++++++++--------------
 .../GraphSONUntypedMessageSerializerV4Test.java    | 37 ++++++------------
 .../binary/GraphBinaryMessageSerializerV4Test.java | 27 +++++++------
 8 files changed, 99 insertions(+), 100 deletions(-)

diff --git 
a/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/message/ResponseMessage.java
 
b/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/message/ResponseMessage.java
index 0a92190f6f..6dc2780dd5 100644
--- 
a/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/message/ResponseMessage.java
+++ 
b/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/message/ResponseMessage.java
@@ -103,6 +103,10 @@ public final class ResponseMessage {
         }
     }
 
+    public static Builder build() {
+        return new Builder();
+    }
+
     public static Builder build(final RequestMessage requestMessage) {
         return new Builder(requestMessage);
     }
@@ -115,19 +119,24 @@ public final class ResponseMessage {
         return new Builder(requestId);
     }
 
-    public static Builder buildV4(final UUID requestId) {
-        return new Builder(requestId, true);
+    public static Builder buildV4() {
+        return new Builder();
     }
 
     public final static class Builder {
 
         private final UUID requestId;
-        private ResponseStatusCode code = ResponseStatusCode.SUCCESS;
+        private ResponseStatusCode code = null;
         private Object result = null;
-        private String statusMessage = "";
+        private String statusMessage = null;
+        private String exception = null;
         private Map<String, Object> attributes = Collections.emptyMap();
         private Map<String, Object> metaData = Collections.emptyMap();
 
+        private Builder() {
+            requestId = null;
+        }
+
         private Builder(final RequestMessage requestMessage) {
             this.requestId = requestMessage.getRequestId();
         }
@@ -140,13 +149,6 @@ public final class ResponseMessage {
             this.requestId = requestId;
         }
 
-        // builder for TP4
-        private Builder(final UUID requestId, final boolean v4) {
-            this.requestId = requestId;
-            this.code = null;
-            this.statusMessage = null;
-        }
-
         public Builder code(final ResponseStatusCode code) {
             this.code = code;
             return this;
@@ -157,6 +159,11 @@ public final class ResponseMessage {
             return this;
         }
 
+        public Builder exception(final String exception) {
+            this.exception = exception;
+            return this;
+        }
+
         public Builder statusAttributes(final Map<String, Object> attributes) {
             this.attributes = attributes;
             return this;
@@ -192,7 +199,7 @@ public final class ResponseMessage {
             if (code == null && statusMessage == null) {
                 return new ResponseMessage(requestId, null, responseResult);
             }
-            final ResponseStatus responseStatus = new ResponseStatus(code, 
statusMessage, attributes);
+            final ResponseStatus responseStatus = new ResponseStatus(code, 
statusMessage, exception);
             return new ResponseMessage(requestId, responseStatus, 
responseResult);
         }
     }
diff --git 
a/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/message/ResponseStatus.java
 
b/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/message/ResponseStatus.java
index dbc2995085..4bc2ca6ecb 100644
--- 
a/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/message/ResponseStatus.java
+++ 
b/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/message/ResponseStatus.java
@@ -18,6 +18,7 @@
  */
 package org.apache.tinkerpop.gremlin.util.message;
 
+import java.util.Collections;
 import java.util.Map;
 
 /**
@@ -26,12 +27,21 @@ import java.util.Map;
 public final class ResponseStatus {
     private final ResponseStatusCode code;
     private final String message;
+    private final String exception;
     private final Map<String, Object> attributes;
 
     public ResponseStatus(final ResponseStatusCode code, final String message, 
final Map<String, Object> attributes) {
         this.code = code;
         this.message = message;
         this.attributes = attributes;
+        this.exception = null;
+    }
+
+    public ResponseStatus(final ResponseStatusCode code, final String message, 
final String exception) {
+        this.code = code;
+        this.message = message;
+        this.exception = exception;
+        this.attributes = Collections.emptyMap();
     }
 
     /**
@@ -48,6 +58,13 @@ public final class ResponseStatus {
         return message;
     }
 
+    /**
+     * Gets the exception in case of error.
+     */
+    public String getException() {
+        return exception;
+    }
+
     /**
      * Gets the meta-data related to the response.  If meta-data is returned 
it is to be considered specific to the
      * "op" that is executed.  Not all "op" implementations will return 
meta-data.
@@ -61,7 +78,7 @@ public final class ResponseStatus {
         return "ResponseStatus{" +
                 "code=" + code +
                 ", message='" + message + '\'' +
-                ", attributes=" + attributes +
+                ", exception=" + exception +
                 '}';
     }
 }
diff --git 
a/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/AbstractGraphSONMessageSerializerV4.java
 
b/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/AbstractGraphSONMessageSerializerV4.java
index dec9fb5b0f..513d8cca80 100644
--- 
a/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/AbstractGraphSONMessageSerializerV4.java
+++ 
b/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/AbstractGraphSONMessageSerializerV4.java
@@ -328,9 +328,6 @@ public abstract class AbstractGraphSONMessageSerializerV4 
extends AbstractGraphS
 
             GraphSONUtil.writeStartObject(responseMessage, jsonGenerator, 
typeSerializer);
 
-            jsonGenerator.writeStringField(SerTokens.TOKEN_REQUEST, 
responseMessage.getRequestId() != null ? 
responseMessage.getRequestId().toString() : null);
-            // todo: write tx id
-
             jsonGenerator.writeFieldName(SerTokens.TOKEN_RESULT);
             jsonGenerator.writeObject(Collections.emptyList());
 
@@ -372,6 +369,7 @@ public abstract class AbstractGraphSONMessageSerializerV4 
extends AbstractGraphS
             GraphSONUtil.writeStartObject(responseMessage, jsonGenerator, 
typeSerializer);
             jsonGenerator.writeStringField(SerTokens.TOKEN_MESSAGE, 
responseMessage.getStatus().getMessage());
             jsonGenerator.writeNumberField(SerTokens.TOKEN_CODE, 
responseMessage.getStatus().getCode().getValue());
+            jsonGenerator.writeStringField(SerTokens.TOKEN_EXCEPTION, 
responseMessage.getStatus().getException());
             GraphSONUtil.writeEndObject(responseMessage, jsonGenerator, 
typeSerializer);
 
             GraphSONUtil.writeEndObject(responseMessage, jsonGenerator, 
typeSerializer);
@@ -386,9 +384,10 @@ public abstract class AbstractGraphSONMessageSerializerV4 
extends AbstractGraphS
         @Override
         public ResponseMessage createObject(final Map<String, Object> data) {
             final Map<String, Object> status = (Map<String, Object>) 
data.get(SerTokens.TOKEN_STATUS);
-            return 
ResponseMessage.build(UUID.fromString(data.get(SerTokens.TOKEN_REQUEST).toString()))
+            return ResponseMessage.build()
                     .code(ResponseStatusCode.getFromValue((Integer) 
status.get(SerTokens.TOKEN_CODE)))
                     
.statusMessage(String.valueOf(status.get(SerTokens.TOKEN_MESSAGE)))
+                    
.exception(String.valueOf(status.get(SerTokens.TOKEN_EXCEPTION)))
                     .result(data.get(SerTokens.TOKEN_RESULT))
                     .create();
         }
diff --git 
a/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/GraphBinaryMessageSerializerV4.java
 
b/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/GraphBinaryMessageSerializerV4.java
index fc1df1b00e..7a9feb7b87 100644
--- 
a/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/GraphBinaryMessageSerializerV4.java
+++ 
b/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/GraphBinaryMessageSerializerV4.java
@@ -30,7 +30,7 @@ import 
org.apache.tinkerpop.gremlin.util.message.ResponseMessage;
 import org.apache.tinkerpop.gremlin.util.message.ResponseStatus;
 import org.apache.tinkerpop.gremlin.util.message.ResponseStatusCode;
 import org.apache.tinkerpop.gremlin.util.ser.binary.RequestMessageSerializerV4;
-import org.javatuples.Pair;
+import org.javatuples.Triplet;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -129,11 +129,6 @@ public class GraphBinaryMessageSerializerV4 extends 
AbstractGraphBinaryMessageSe
             if (parts.contains(MessageParts.HEADER)) {
                 // Version
                 buffer.writeByte(GraphBinaryWriter.VERSION_BYTE);
-
-                // Nullable request id
-                writer.writeValue(responseMessage.getRequestId(), buffer, 
true);
-                // Nullable tx id, todo: add real value when ready
-                writer.writeValue((UUID)null, buffer, true);
             }
 
             if (parts.contains(MessageParts.DATA)) {
@@ -156,6 +151,8 @@ public class GraphBinaryMessageSerializerV4 extends 
AbstractGraphBinaryMessageSe
                 writer.writeValue(status.getCode().getValue(), buffer, false);
                 // Nullable status message
                 writer.writeValue(status.getMessage(), buffer, true);
+                // Nullable exception
+                writer.writeValue(status.getException(), buffer, true);
             }
         } catch (IOException e) {
             throw new SerializationException(e);
@@ -182,9 +179,12 @@ public class GraphBinaryMessageSerializerV4 extends 
AbstractGraphBinaryMessageSe
         return result;
     }
 
-    private Pair<ResponseStatusCode, String> readFooter(final Buffer buffer) 
throws IOException {
-        return 
Pair.with(ResponseStatusCode.getFromValue(reader.readValue(buffer, 
Integer.class, false)),
-                reader.readValue(buffer, String.class, true));
+    private Triplet<ResponseStatusCode, String, String> readFooter(final 
Buffer buffer) throws IOException {
+        final ResponseStatusCode statusCode = 
ResponseStatusCode.getFromValue(reader.readValue(buffer, Integer.class, false));
+        final String message = reader.readValue(buffer, String.class, true);
+        final String exception = reader.readValue(buffer, String.class, true);
+
+        return Triplet.with(statusCode, message, exception);
     }
 
     @Override
@@ -194,12 +194,10 @@ public class GraphBinaryMessageSerializerV4 extends 
AbstractGraphBinaryMessageSe
         try {
             // empty input buffer
             if (buffer.readableBytes() == 0) {
-                return ResponseMessage.buildV4(null).
+                return ResponseMessage.buildV4().
                         
code(ResponseStatusCode.NO_CONTENT).result(Collections.emptyList()).create();
             }
 
-            UUID requestId = null;
-
             if (isFirstChunk) {
                 final int version = buffer.readByte() & 0xff;
 
@@ -208,26 +206,23 @@ public class GraphBinaryMessageSerializerV4 extends 
AbstractGraphBinaryMessageSe
                     // Or the buffer offsets are wrong
                     throw new SerializationException("The most significant bit 
should be set according to the format");
                 }
-
-                requestId = reader.readValue(buffer, UUID.class, true);
-                // todo: handle tx id
-                reader.readValue(buffer, UUID.class, true);
             }
 
             final List<Object> result = readPayload(buffer);
 
             // no footer
             if (buffer.readableBytes() == 0) {
-                return ResponseMessage.buildV4(requestId)
+                return ResponseMessage.buildV4()
                         .result(result)
                         .create();
             }
 
-            final Pair<ResponseStatusCode, String> footer = readFooter(buffer);
-            return ResponseMessage.buildV4(requestId)
+            final Triplet<ResponseStatusCode, String, String> footer = 
readFooter(buffer);
+            return ResponseMessage.buildV4()
                     .result(result)
                     .code(footer.getValue0())
                     .statusMessage(footer.getValue1())
+                    .exception(footer.getValue2())
                     .create();
 
         } catch (IOException ex) {
diff --git 
a/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/SerTokens.java
 
b/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/SerTokens.java
index 1d3fb13c9e..34b98a9a8f 100644
--- 
a/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/SerTokens.java
+++ 
b/gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/SerTokens.java
@@ -30,6 +30,7 @@ public final class SerTokens {
     public static final String TOKEN_DATA = "data";
     public static final String TOKEN_META = "meta";
     public static final String TOKEN_CODE = "code";
+    public static final String TOKEN_EXCEPTION = "exception";
     public static final String TOKEN_REQUEST = "requestId";
     public static final String TOKEN_MESSAGE = "message";
     public static final String TOKEN_PROCESSOR = "processor";
diff --git 
a/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONMessageSerializerV4Test.java
 
b/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONMessageSerializerV4Test.java
index 954fbd0ab0..dadcf91da9 100644
--- 
a/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONMessageSerializerV4Test.java
+++ 
b/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONMessageSerializerV4Test.java
@@ -19,8 +19,9 @@
 package org.apache.tinkerpop.gremlin.util.ser;
 
 import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.buffer.UnpooledByteBufAllocator;
 import io.netty.util.CharsetUtil;
-import org.apache.tinkerpop.gremlin.util.MessageSerializer;
 import org.apache.tinkerpop.gremlin.util.message.ResponseMessage;
 import org.apache.tinkerpop.gremlin.util.message.ResponseStatusCode;
 import org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException;
@@ -31,25 +32,26 @@ import org.junit.Test;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
-import java.util.UUID;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
 
 @SuppressWarnings("unchecked")
-public class GraphSONMessageSerializerV4Test extends 
GraphSONMessageSerializerV3Test {
+public class GraphSONMessageSerializerV4Test {
 
+    private final static ByteBufAllocator allocator = 
UnpooledByteBufAllocator.DEFAULT;
+    private final ResponseMessage.Builder responseMessageBuilder = 
ResponseMessage.build();
     private final GraphSONMessageSerializerV4 serializer = new 
GraphSONMessageSerializerV4();
 
     private final ObjectMapper mapper = new ObjectMapper();
 
     @Test
     public void shouldSerializeChunkedResponseMessage() throws 
SerializationException, JsonProcessingException {
-        final UUID id = UUID.randomUUID();
-        final ResponseMessage header = ResponseMessage.buildV4(id)
+        final ResponseMessage header = ResponseMessage.buildV4()
                 .result(Arrays.asList("header", 0))
                 .create();
 
-        final ResponseMessage footer = ResponseMessage.buildV4(id)
+        final ResponseMessage footer = ResponseMessage.buildV4()
                 .result(Arrays.asList("footer", 3))
                 .code(ResponseStatusCode.SUCCESS)
                 .statusMessage("OK")
@@ -75,7 +77,7 @@ public class GraphSONMessageSerializerV4Test extends 
GraphSONMessageSerializerV3
         // a message composed of all chunks must be deserialized
         bbCombined.resetReaderIndex();
         final ResponseMessage deserialized = 
serializer.deserializeResponse(bbCombined);
-        assertEquals(id, deserialized.getRequestId());
+        assertNull(deserialized.getRequestId());
         assertEquals(200, deserialized.getStatus().getCode().getValue());
         assertEquals("OK", deserialized.getStatus().getMessage());
         assertEquals(8, ((List)deserialized.getResult().getData()).size());
@@ -83,8 +85,7 @@ public class GraphSONMessageSerializerV4Test extends 
GraphSONMessageSerializerV3
 
     @Test
     public void shouldSerializeResponseMessageWithoutData() throws 
SerializationException, JsonProcessingException {
-        final UUID id = UUID.randomUUID();
-        final ResponseMessage header = ResponseMessage.buildV4(id)
+        final ResponseMessage header = ResponseMessage.buildV4()
                 .code(ResponseStatusCode.SUCCESS)
                 .statusMessage("OK")
                 .create();
@@ -101,7 +102,7 @@ public class GraphSONMessageSerializerV4Test extends 
GraphSONMessageSerializerV3
 
         bb0.resetReaderIndex();
         final ResponseMessage deserialized = 
serializer.deserializeResponse(bb0);
-        assertEquals(id, deserialized.getRequestId());
+        assertNull(deserialized.getRequestId());
         assertEquals(200, deserialized.getStatus().getCode().getValue());
         assertEquals("OK", deserialized.getStatus().getMessage());
         assertEquals(0, ((List)deserialized.getResult().getData()).size());
@@ -109,8 +110,7 @@ public class GraphSONMessageSerializerV4Test extends 
GraphSONMessageSerializerV3
 
     @Test
     public void shouldSerializeChunkedResponseMessageWithEmptyData() throws 
SerializationException, JsonProcessingException {
-        final UUID id = UUID.randomUUID();
-        final ResponseMessage header = ResponseMessage.buildV4(id)
+        final ResponseMessage header = ResponseMessage.buildV4()
                 .result(new ArrayList<>())
                 .code(ResponseStatusCode.SUCCESS)
                 .statusMessage("OK")
@@ -128,7 +128,7 @@ public class GraphSONMessageSerializerV4Test extends 
GraphSONMessageSerializerV3
 
         bb0.resetReaderIndex();
         final ResponseMessage deserialized = 
serializer.deserializeResponse(bb0);
-        assertEquals(id, deserialized.getRequestId());
+        assertNull(deserialized.getRequestId());
         assertEquals(200, deserialized.getStatus().getCode().getValue());
         assertEquals("OK", deserialized.getStatus().getMessage());
         assertEquals(0, ((List)deserialized.getResult().getData()).size());
@@ -136,12 +136,11 @@ public class GraphSONMessageSerializerV4Test extends 
GraphSONMessageSerializerV3
 
     @Test
     public void shouldSerializeChunkedResponseMessageWithError() throws 
SerializationException, JsonProcessingException {
-        final UUID id = UUID.randomUUID();
-        final ResponseMessage header = ResponseMessage.buildV4(id)
+        final ResponseMessage header = ResponseMessage.buildV4()
                 .result(Arrays.asList("header", 0))
                 .create();
 
-        final ResponseMessage footer = ResponseMessage.buildV4(id)
+        final ResponseMessage footer = ResponseMessage.buildV4()
                 .result(Arrays.asList("footer", 3))
                 .code(ResponseStatusCode.SERVER_ERROR)
                 .statusMessage("SERVER_ERROR")
@@ -166,20 +165,9 @@ public class GraphSONMessageSerializerV4Test extends 
GraphSONMessageSerializerV3
 
         bbCombined.resetReaderIndex();
         final ResponseMessage deserialized = 
serializer.deserializeResponse(bbCombined);
-        assertEquals(id, deserialized.getRequestId());
+        assertNull(deserialized.getRequestId());
         assertEquals(500, deserialized.getStatus().getCode().getValue());
         assertEquals("SERVER_ERROR", deserialized.getStatus().getMessage());
         assertEquals(6, ((List)deserialized.getResult().getData()).size());
     }
-
-    @Override
-    protected ResponseMessage convert(final Object toSerialize, 
MessageSerializer<?> serializer) throws SerializationException {
-        final ByteBuf bb = 
serializer.serializeResponseAsBinary(responseMessageBuilder.result(toSerialize).create(),
 allocator);
-        return serializer.deserializeResponse(bb);
-    }
-
-    @Override
-    protected ResponseMessage convert(final Object toSerialize) throws 
SerializationException {
-        return convert(toSerialize, this.serializer);
-    }
 }
diff --git 
a/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONUntypedMessageSerializerV4Test.java
 
b/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONUntypedMessageSerializerV4Test.java
index 9314d849ec..4a48ca6f12 100644
--- 
a/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONUntypedMessageSerializerV4Test.java
+++ 
b/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONUntypedMessageSerializerV4Test.java
@@ -36,23 +36,22 @@ import java.util.List;
 import java.util.UUID;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
 
 public class GraphSONUntypedMessageSerializerV4Test {
 
-    private final UUID requestId = 
UUID.fromString("6457272A-4018-4538-B9AE-08DD5DDC0AA1");
-    private final ResponseMessage.Builder responseMessageBuilder = 
ResponseMessage.build(requestId);
+    private final ResponseMessage.Builder responseMessageBuilder = 
ResponseMessage.build();
     private final GraphSONUntypedMessageSerializerV4 serializer = new 
GraphSONUntypedMessageSerializerV4();
     private final static ByteBufAllocator allocator = 
UnpooledByteBufAllocator.DEFAULT;
     private final ObjectMapper mapper = new ObjectMapper();
 
     @Test
     public void shouldSerializeChunkedResponseMessage() throws 
SerializationException, JsonProcessingException {
-        final UUID id = UUID.randomUUID();
-        final ResponseMessage header = ResponseMessage.buildV4(id)
+        final ResponseMessage header = ResponseMessage.buildV4()
                 .result(Arrays.asList("header", 0))
                 .create();
 
-        final ResponseMessage footer = ResponseMessage.buildV4(id)
+        final ResponseMessage footer = ResponseMessage.buildV4()
                 .result(Arrays.asList("footer", 3))
                 .code(ResponseStatusCode.SUCCESS)
                 .statusMessage("OK")
@@ -78,7 +77,7 @@ public class GraphSONUntypedMessageSerializerV4Test {
         // a message composed of all chunks must be deserialized
         bbCombined.resetReaderIndex();
         final ResponseMessage deserialized = 
serializer.deserializeResponse(bbCombined);
-        assertEquals(id, deserialized.getRequestId());
+        assertNull(deserialized.getRequestId());
         assertEquals(200, deserialized.getStatus().getCode().getValue());
         assertEquals("OK", deserialized.getStatus().getMessage());
         assertEquals(8, ((List)deserialized.getResult().getData()).size());
@@ -86,8 +85,7 @@ public class GraphSONUntypedMessageSerializerV4Test {
 
     @Test
     public void shouldSerializeResponseMessageWithoutData() throws 
SerializationException, JsonProcessingException {
-        final UUID id = UUID.randomUUID();
-        final ResponseMessage header = ResponseMessage.buildV4(id)
+        final ResponseMessage header = ResponseMessage.buildV4()
                 .code(ResponseStatusCode.SUCCESS)
                 .statusMessage("OK")
                 .create();
@@ -104,7 +102,7 @@ public class GraphSONUntypedMessageSerializerV4Test {
 
         bb0.resetReaderIndex();
         final ResponseMessage deserialized = 
serializer.deserializeResponse(bb0);
-        assertEquals(id, deserialized.getRequestId());
+        assertNull(deserialized.getRequestId());
         assertEquals(200, deserialized.getStatus().getCode().getValue());
         assertEquals("OK", deserialized.getStatus().getMessage());
         assertEquals(0, ((List)deserialized.getResult().getData()).size());
@@ -112,8 +110,7 @@ public class GraphSONUntypedMessageSerializerV4Test {
 
     @Test
     public void shouldSerializeChunkedResponseMessageWithEmptyData() throws 
SerializationException, JsonProcessingException {
-        final UUID id = UUID.randomUUID();
-        final ResponseMessage header = ResponseMessage.buildV4(id)
+        final ResponseMessage header = ResponseMessage.buildV4()
                 .result(new ArrayList<>())
                 .code(ResponseStatusCode.SUCCESS)
                 .statusMessage("OK")
@@ -131,7 +128,7 @@ public class GraphSONUntypedMessageSerializerV4Test {
 
         bb0.resetReaderIndex();
         final ResponseMessage deserialized = 
serializer.deserializeResponse(bb0);
-        assertEquals(id, deserialized.getRequestId());
+        assertNull(deserialized.getRequestId());
         assertEquals(200, deserialized.getStatus().getCode().getValue());
         assertEquals("OK", deserialized.getStatus().getMessage());
         assertEquals(0, ((List)deserialized.getResult().getData()).size());
@@ -139,12 +136,11 @@ public class GraphSONUntypedMessageSerializerV4Test {
 
     @Test
     public void shouldSerializeChunkedResponseMessageWithError() throws 
SerializationException, JsonProcessingException {
-        final UUID id = UUID.randomUUID();
-        final ResponseMessage header = ResponseMessage.buildV4(id)
+        final ResponseMessage header = ResponseMessage.buildV4()
                 .result(Arrays.asList("header", 0))
                 .create();
 
-        final ResponseMessage footer = ResponseMessage.buildV4(id)
+        final ResponseMessage footer = ResponseMessage.buildV4()
                 .result(Arrays.asList("footer", 3))
                 .code(ResponseStatusCode.SERVER_ERROR)
                 .statusMessage("SERVER_ERROR")
@@ -169,18 +165,9 @@ public class GraphSONUntypedMessageSerializerV4Test {
 
         bbCombined.resetReaderIndex();
         final ResponseMessage deserialized = 
serializer.deserializeResponse(bbCombined);
-        assertEquals(id, deserialized.getRequestId());
+        assertNull(deserialized.getRequestId());
         assertEquals(500, deserialized.getStatus().getCode().getValue());
         assertEquals("SERVER_ERROR", deserialized.getStatus().getMessage());
         assertEquals(6, ((List)deserialized.getResult().getData()).size());
     }
-
-    private ResponseMessage convert(final Object toSerialize, 
MessageSerializer<?> serializer) throws SerializationException {
-        final ByteBuf bb = 
serializer.serializeResponseAsBinary(responseMessageBuilder.result(toSerialize).create(),
 allocator);
-        return serializer.deserializeResponse(bb);
-    }
-
-    private ResponseMessage convert(final Object toSerialize) throws 
SerializationException {
-        return convert(toSerialize, this.serializer);
-    }
 }
diff --git 
a/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/binary/GraphBinaryMessageSerializerV4Test.java
 
b/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/binary/GraphBinaryMessageSerializerV4Test.java
index e4e956271f..f73a1d825f 100644
--- 
a/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/binary/GraphBinaryMessageSerializerV4Test.java
+++ 
b/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/binary/GraphBinaryMessageSerializerV4Test.java
@@ -33,6 +33,7 @@ import java.util.UUID;
 import java.util.stream.Stream;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
 
 public class GraphBinaryMessageSerializerV4Test {
 
@@ -74,7 +75,7 @@ public class GraphBinaryMessageSerializerV4Test {
 
     @Test
     public void shouldSerializeAndDeserializeResponseInFooterChunk() throws 
SerializationException {
-        final ResponseMessage response = ResponseMessage.build((UUID)null)
+        final ResponseMessage response = ResponseMessage.build()
                 .result(Arrays.asList(1, "test"))
                 .code(ResponseStatusCode.SUCCESS)
                 .statusMessage("OK")
@@ -100,7 +101,7 @@ public class GraphBinaryMessageSerializerV4Test {
     @Test
     public void shouldSerializeAndDeserializeCompositeResponse() throws 
SerializationException {
         final List headerData = Arrays.asList(0, "header");
-        final ResponseMessage header = 
ResponseMessage.buildV4(UUID.randomUUID())
+        final ResponseMessage header = ResponseMessage.buildV4()
                 .result(headerData)
                 .create();
 
@@ -108,7 +109,7 @@ public class GraphBinaryMessageSerializerV4Test {
         final List chunkData2 = Arrays.asList(2, "data2");
 
         final List footerData = Arrays.asList(0xFF, "footer");
-        final ResponseMessage footer = ResponseMessage.build((UUID)null)
+        final ResponseMessage footer = ResponseMessage.build()
                 .result(footerData)
                 .code(ResponseStatusCode.SUCCESS)
                 .statusMessage("OK")
@@ -123,7 +124,7 @@ public class GraphBinaryMessageSerializerV4Test {
 
         final ResponseMessage deserialized = serializer.readChunk(bbCombined, 
true);
 
-        assertEquals(header.getRequestId(), deserialized.getRequestId());
+        assertNull(deserialized.getRequestId());
         // Status
         assertEquals(footer.getStatus().getCode(), 
deserialized.getStatus().getCode());
         assertEquals(footer.getStatus().getMessage(), 
deserialized.getStatus().getMessage());
@@ -136,7 +137,7 @@ public class GraphBinaryMessageSerializerV4Test {
     @Test
     public void shouldSerializeAndDeserializeCompositeResponseWithError() 
throws SerializationException {
         final List headerData = Arrays.asList(0, "header");
-        final ResponseMessage header = 
ResponseMessage.buildV4(UUID.randomUUID())
+        final ResponseMessage header = ResponseMessage.buildV4()
                 .result(headerData)
                 .create();
 
@@ -144,10 +145,11 @@ public class GraphBinaryMessageSerializerV4Test {
         final List chunkData2 = Arrays.asList(2, "data2");
 
         final List footerData = Arrays.asList(0xFF, "footer");
-        final ResponseMessage footer = ResponseMessage.build((UUID)null)
+        final ResponseMessage footer = ResponseMessage.build()
                 .result(footerData)
                 .code(ResponseStatusCode.SERVER_ERROR)
                 .statusMessage("SERVER_ERROR")
+                .exception("fire in data center")
                 .create();
 
         final ByteBuf bb0 = serializer.writeHeader(header, allocator);
@@ -159,10 +161,11 @@ public class GraphBinaryMessageSerializerV4Test {
 
         final ResponseMessage deserialized = serializer.readChunk(bbCombined, 
true);
 
-        assertEquals(header.getRequestId(), deserialized.getRequestId());
+        assertNull(deserialized.getRequestId());
         // Status
         assertEquals(footer.getStatus().getCode(), 
deserialized.getStatus().getCode());
         assertEquals(footer.getStatus().getMessage(), 
deserialized.getStatus().getMessage());
+        assertEquals(footer.getStatus().getException(), 
footer.getStatus().getException());
         // Result
         List<Integer> combinedData = new ArrayList<>();
         Stream.of(headerData, chunkData1, 
chunkData2).forEach(combinedData::addAll);
@@ -172,11 +175,13 @@ public class GraphBinaryMessageSerializerV4Test {
 
     // copy-paste because response format will be different
     private static void assertResponseEquals(final ResponseMessage expected, 
final ResponseMessage actual) {
-        assertEquals(expected.getRequestId(), actual.getRequestId());
+        assertNull(actual.getRequestId());
         // Status
-        assertEquals(expected.getStatus().getCode(), 
actual.getStatus().getCode());
-        assertEquals(expected.getStatus().getMessage(), 
actual.getStatus().getMessage());
-        assertEquals(expected.getStatus().getAttributes(), 
actual.getStatus().getAttributes());
+        if (expected.getStatus() != null && actual.getStatus() != null) {
+            assertEquals(expected.getStatus().getCode(), 
actual.getStatus().getCode());
+            assertEquals(expected.getStatus().getMessage(), 
actual.getStatus().getMessage());
+            assertEquals(expected.getStatus().getAttributes(), 
actual.getStatus().getAttributes());
+        }
         // Result
         // null == empty List
         if (!isEmptyData(expected) && !isEmptyData(actual)) {

Reply via email to