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();