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

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


The following commit(s) were added to refs/heads/master-http by this push:
     new e0f6994f4a Change GraphSONv4 response to have message and exception 
for error responses only CTR
e0f6994f4a is described below

commit e0f6994f4aa65fd84b9e55e6c91e7aeb542282b5
Author: Ken Hu <106191785+kenh...@users.noreply.github.com>
AuthorDate: Fri May 3 22:07:32 2024 -0700

    Change GraphSONv4 response to have message and exception for error 
responses only CTR
---
 .../server/handler/HttpGremlinEndpointHandler.java |  3 +--
 .../server/GremlinServerHttpIntegrateTest.java     | 22 ++++++++++++++++++++++
 .../ser/AbstractGraphSONMessageSerializerV4.java   | 16 +++++++++++-----
 .../util/ser/GraphBinaryMessageSerializerV4.java   |  2 +-
 .../GraphSONUntypedMessageSerializerV4Test.java    | 10 ++++------
 .../binary/GraphBinaryMessageSerializerV4Test.java |  1 -
 6 files changed, 39 insertions(+), 15 deletions(-)

diff --git 
a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpGremlinEndpointHandler.java
 
b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpGremlinEndpointHandler.java
index 2346f5e217..5698321dcc 100644
--- 
a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpGremlinEndpointHandler.java
+++ 
b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpGremlinEndpointHandler.java
@@ -554,7 +554,7 @@ public class HttpGremlinEndpointHandler extends 
SimpleChannelInboundHandler<Requ
 
                 // need to put status in last message
                 if (ctx.getRequestState() == FINISHING) {
-                    builder.code(HttpResponseStatus.OK).statusMessage("OK");
+                    builder.code(HttpResponseStatus.OK);
                 }
 
                 responseMessage = builder.create();
@@ -571,7 +571,6 @@ public class HttpGremlinEndpointHandler extends 
SimpleChannelInboundHandler<Requ
                     return 
serializer.serializeResponseAsBinary(ResponseMessageV4.build()
                             .result(aggregate)
                             .code(HttpResponseStatus.OK)
-                            .statusMessage("OK")
                             .create(), nettyContext.alloc());
 
                 case STREAMING:
diff --git 
a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java
 
b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java
index db76625e66..4ebc9d7ace 100644
--- 
a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java
+++ 
b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java
@@ -1351,6 +1351,28 @@ public class GremlinServerHttpIntegrateTest extends 
AbstractGremlinServerIntegra
         }
     }
 
+    @Test
+    public void shouldNotContainStatusMessageOrExceptionWith200() throws 
Exception {
+        final GraphSONMessageSerializerV4 serializer = new 
GraphSONMessageSerializerV4();
+        final ByteBuf serializedRequest = serializer.serializeRequestAsBinary(
+                RequestMessageV4.build("1+1").create(),
+                new UnpooledByteBufAllocator(false));
+
+        final CloseableHttpClient httpclient = HttpClients.createDefault();
+        final HttpPost httppost = new 
HttpPost(TestClientFactory.createURLString());
+        httppost.addHeader(HttpHeaders.ACCEPT, 
SerializersV4.GRAPHSON_V4.getValue());
+        httppost.addHeader("Content-Type", 
SerializersV4.GRAPHSON_V4.getValue());
+        httppost.setEntity(new ByteArrayEntity(serializedRequest.array()));
+
+        try (final CloseableHttpResponse response = 
httpclient.execute(httppost)) {
+            assertEquals(200, response.getStatusLine().getStatusCode());
+            final String json = EntityUtils.toString(response.getEntity());
+            final JsonNode node = mapper.readTree(json);
+            assertNull(node.get("status").get("message"));
+            assertNull(node.get("status").get("exception"));
+        }
+    }
+
     private static ByteBuf toByteBuf(final HttpEntity httpEntity) throws 
IOException {
         final byte[] asArray = EntityUtils.toByteArray(httpEntity);
         return Unpooled.wrappedBuffer(asArray);
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 4008907a35..cd1debb3df 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
@@ -362,8 +362,11 @@ public abstract class AbstractGraphSONMessageSerializerV4 
extends AbstractMessag
             jsonGenerator.writeFieldName(SerTokens.TOKEN_STATUS);
 
             GraphSONUtil.writeStartObject(responseMessage, jsonGenerator, 
typeSerializer);
-            jsonGenerator.writeStringField(SerTokens.TOKEN_MESSAGE, 
responseMessage.getStatus().getMessage());
             jsonGenerator.writeNumberField(SerTokens.TOKEN_CODE, 
responseMessage.getStatus().getCode().code());
+            final String message = responseMessage.getStatus().getMessage();
+            if (message != null && !message.isEmpty()) {
+                jsonGenerator.writeStringField(SerTokens.TOKEN_MESSAGE, 
responseMessage.getStatus().getMessage());
+            }
             final String exception = 
responseMessage.getStatus().getException();
             if (exception != null && !exception.isEmpty()) {
                 jsonGenerator.writeStringField(SerTokens.TOKEN_EXCEPTION, 
responseMessage.getStatus().getException());
@@ -446,10 +449,11 @@ public abstract class AbstractGraphSONMessageSerializerV4 
extends AbstractMessag
 
             jsonGenerator.writeFieldName(SerTokens.TOKEN_STATUS);
             GraphSONUtil.writeStartObject(responseMessage, jsonGenerator, 
typeSerializer);
-            jsonGenerator.writeStringField(SerTokens.TOKEN_MESSAGE, 
responseMessage.getStatus().getMessage());
             jsonGenerator.writeNumberField(SerTokens.TOKEN_CODE, 
responseMessage.getStatus().getCode().code());
-            if (responseMessage.getStatus().getCode() != HttpResponseStatus.OK 
&&
-                    responseMessage.getStatus().getException() != null) {
+            if (responseMessage.getStatus().getMessage() != null) {
+                jsonGenerator.writeStringField(SerTokens.TOKEN_MESSAGE, 
responseMessage.getStatus().getMessage());
+            }
+            if (responseMessage.getStatus().getException() != null) {
                 jsonGenerator.writeStringField(SerTokens.TOKEN_EXCEPTION, 
responseMessage.getStatus().getException());
             }
             GraphSONUtil.writeEndObject(responseMessage, jsonGenerator, 
typeSerializer);
@@ -468,12 +472,14 @@ public abstract class AbstractGraphSONMessageSerializerV4 
extends AbstractMessag
             final Map<String, Object> status = (Map<String, Object>) 
data.get(SerTokens.TOKEN_STATUS);
             ResponseMessageV4.Builder response = ResponseMessageV4.build()
                     .code(HttpResponseStatus.valueOf((Integer) 
status.get(SerTokens.TOKEN_CODE)))
-                    
.statusMessage(String.valueOf(status.get(SerTokens.TOKEN_MESSAGE)))
                     .result(data.get(SerTokens.TOKEN_RESULT));
 
             if (null != status.get(SerTokens.TOKEN_EXCEPTION)) {
                 
response.exception(String.valueOf(status.get(SerTokens.TOKEN_EXCEPTION)));
             }
+            if (null != status.get(SerTokens.TOKEN_MESSAGE)) {
+                
response.statusMessage(String.valueOf(status.get(SerTokens.TOKEN_MESSAGE)));
+            }
 
             return response.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 efabd352bb..b87e3290ef 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
@@ -134,7 +134,7 @@ public class GraphBinaryMessageSerializerV4 extends 
AbstractMessageSerializerV4<
 
     @Override
     public String[] mimeTypesSupported() {
-        return new String[] {/*serializeToString ? obtainStringdMimeType() : 
obtainMimeType()*/MIME_TYPE};
+        return new String[] {MIME_TYPE};
     }
 
     private void addCustomClasses(final Map<String, Object> config, final 
TypeSerializerRegistry.Builder builder) {
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 c36c69c2be..483bd10c6f 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
@@ -52,7 +52,6 @@ public class GraphSONUntypedMessageSerializerV4Test {
         final ResponseMessageV4 footer = ResponseMessageV4.build()
                 .result(Arrays.asList("footer", 3))
                 .code(HttpResponseStatus.OK)
-                .statusMessage("OK")
                 .create();
 
         final ByteBuf bb0 = serializer.writeHeader(header, allocator);
@@ -69,14 +68,14 @@ public class GraphSONUntypedMessageSerializerV4Test {
         assertEquals("header", node.get("result").get(0).textValue());
         assertEquals("footer", node.get("result").get(6).textValue());
         assertEquals(8, node.get("result").size());
-        assertEquals("OK", node.get("status").get("message").asText());
+        assertNull(node.get("status").get("message"));
         assertEquals(200, node.get("status").get("code").asInt());
 
         // a message composed of all chunks must be deserialized
         bbCombined.resetReaderIndex();
         final ResponseMessageV4 deserialized = 
serializer.deserializeBinaryResponse(bbCombined);
         assertEquals(200, deserialized.getStatus().getCode().code());
-        assertEquals("OK", deserialized.getStatus().getMessage());
+        assertEquals(null, deserialized.getStatus().getMessage());
         assertEquals(8, ((List)deserialized.getResult().getData()).size());
     }
 
@@ -84,7 +83,6 @@ public class GraphSONUntypedMessageSerializerV4Test {
     public void shouldSerializeResponseMessageWithoutData() throws 
SerializationException, JsonProcessingException {
         final ResponseMessageV4 header = ResponseMessageV4.build()
                 .code(HttpResponseStatus.OK)
-                .statusMessage("OK")
                 .create();
 
         final ByteBuf bb0 = serializer.writeHeader(header, allocator);
@@ -94,13 +92,13 @@ public class GraphSONUntypedMessageSerializerV4Test {
         final JsonNode node = mapper.readTree(json);
 
         assertEquals(0, node.get("result").size());
-        assertEquals("OK", node.get("status").get("message").asText());
+        assertNull(node.get("status").get("message"));
         assertEquals(200, node.get("status").get("code").asInt());
 
         bb0.resetReaderIndex();
         final ResponseMessageV4 deserialized = 
serializer.deserializeBinaryResponse(bb0);
         assertEquals(200, deserialized.getStatus().getCode().code());
-        assertEquals("OK", deserialized.getStatus().getMessage());
+        assertEquals(null, deserialized.getStatus().getMessage());
         assertEquals(0, ((List)deserialized.getResult().getData()).size());
     }
 
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 96492250d1..4403e9584b 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
@@ -56,7 +56,6 @@ public class GraphBinaryMessageSerializerV4Test {
     public void shouldSerializeAndDeserializeResponseInSingleChunk() throws 
SerializationException {
         final ResponseMessageV4 response = ResponseMessageV4.build()
                 .code(HttpResponseStatus.OK)
-                .statusMessage("OK")
                 .result(Arrays.asList(1, "test"))
                 .create();
 

Reply via email to