Write a simple Print Writer Wrapper to prevent the closing on end of try block
diff --git a/src/main/java/org/apache/sling/graphql/core/servlet/GraphQLServlet.java b/src/main/java/org/apache/sling/graphql/core/servlet/GraphQLServlet.java
index d40da4e..43adfef 100644
--- a/src/main/java/org/apache/sling/graphql/core/servlet/GraphQLServlet.java
+++ b/src/main/java/org/apache/sling/graphql/core/servlet/GraphQLServlet.java
@@ -21,6 +21,8 @@
package org.apache.sling.graphql.core.servlet;
import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.Writer;
import java.util.Arrays;
import java.util.Map;
import java.util.regex.Matcher;
@@ -315,8 +317,7 @@
return;
}
// The Response Writer cannot be flushed or closed here to avoid issues with Redirects etc
- try {
- JsonWriter writer = Json.createWriter(response.getWriter());
+ try (JsonWriter writer = Json.createWriter(new NoCloseWriterWrapper(response.getWriter()))) {
Map<String, Object> executionResult = queryExecutor.execute(query, result.getVariables(), resource,
request.getRequestPathInfo().getSelectors());
writer.write(Json.createObjectBuilder(executionResult).build().asJsonObject());
@@ -329,8 +330,7 @@
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
// The Response Writer cannot be flushed or closed here to avoid issues with Redirects etc
- try {
- JsonWriter writer = Json.createWriter(response.getWriter());
+ try (JsonWriter writer = Json.createWriter(new NoCloseWriterWrapper(response.getWriter()))) {
final QueryParser.Result result = QueryParser.fromJSON(persistedQuery);
Map<String, Object> executionResult = queryExecutor.execute(result.getQuery(), result.getVariables(), request.getResource(),
request.getRequestPathInfo().getSelectors());
@@ -356,4 +356,12 @@
}
+ private class NoCloseWriterWrapper extends PrintWriter {
+ public NoCloseWriterWrapper(@NotNull Writer out) {
+ super(out);
+ }
+
+ @Override
+ public void close() {}
+ }
}
diff --git a/src/test/java/org/apache/sling/graphql/core/servlet/GraphQLServletTest.java b/src/test/java/org/apache/sling/graphql/core/servlet/GraphQLServletTest.java
index 1fe9d84..ae276cd 100644
--- a/src/test/java/org/apache/sling/graphql/core/servlet/GraphQLServletTest.java
+++ b/src/test/java/org/apache/sling/graphql/core/servlet/GraphQLServletTest.java
@@ -54,6 +54,8 @@
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -183,6 +185,7 @@
MockSlingHttpServletResponse response = context.response();
MockSlingHttpServletRequest request = new MockSlingHttpServletRequest(context.bundleContext());
+ java.io.PrintWriter writer = spy(response.getWriter());
request.setMethod("POST");
request.setContent(TEST_QUERY.getBytes(StandardCharsets.UTF_8));
@@ -195,6 +198,7 @@
servlet.doPost(request, response);
assertEquals(expectedStatus, response.getStatus());
+ verify(writer, never()).close();
}
@Test