diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceRequestParameters.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceRequestParameters.java
index e0af3bd..df321bc 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceRequestParameters.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceRequestParameters.java
@@ -204,33 +204,37 @@
         this.multiStatement = multiStatement;
     }
 
+    public ObjectNode asJson() {
+        ObjectNode object = OBJECT_MAPPER.createObjectNode();
+        object.put("host", host);
+        object.put("path", path);
+        object.put("statement", statement != null ? JSONUtil.escape(new StringBuilder(), statement).toString() : null);
+        object.put("pretty", pretty);
+        object.put("mode", mode);
+        object.put("clientContextID", clientContextID);
+        object.put("format", format);
+        object.put("timeout", timeout);
+        object.put("maxResultReads", maxResultReads);
+        object.put("planFormat", planFormat);
+        object.put("expressionTree", expressionTree);
+        object.put("rewrittenExpressionTree", rewrittenExpressionTree);
+        object.put("logicalPlan", logicalPlan);
+        object.put("optimizedLogicalPlan", optimizedLogicalPlan);
+        object.put("job", job);
+        object.put("signature", signature);
+        object.put("multiStatement", multiStatement);
+        if (statementParams != null) {
+            for (Map.Entry<String, JsonNode> statementParam : statementParams.entrySet()) {
+                object.set('$' + statementParam.getKey(), statementParam.getValue());
+            }
+        }
+        return object;
+    }
+
     @Override
     public String toString() {
         try {
-            ObjectNode on = OBJECT_MAPPER.createObjectNode();
-            on.put("host", host);
-            on.put("path", path);
-            on.put("statement", statement != null ? JSONUtil.escape(new StringBuilder(), statement).toString() : null);
-            on.put("pretty", pretty);
-            on.put("mode", mode);
-            on.put("clientContextID", clientContextID);
-            on.put("format", format);
-            on.put("timeout", timeout);
-            on.put("maxResultReads", maxResultReads);
-            on.put("planFormat", planFormat);
-            on.put("expressionTree", expressionTree);
-            on.put("rewrittenExpressionTree", rewrittenExpressionTree);
-            on.put("logicalPlan", logicalPlan);
-            on.put("optimizedLogicalPlan", optimizedLogicalPlan);
-            on.put("job", job);
-            on.put("signature", signature);
-            on.put("multiStatement", multiStatement);
-            if (statementParams != null) {
-                for (Map.Entry<String, JsonNode> statementParam : statementParams.entrySet()) {
-                    on.set('$' + statementParam.getKey(), statementParam.getValue());
-                }
-            }
-            return OBJECT_MAPPER.writeValueAsString(on);
+            return OBJECT_MAPPER.writeValueAsString(asJson());
         } catch (JsonProcessingException e) {
             QueryServiceServlet.LOGGER.debug("unexpected exception marshalling {} instance to json", getClass(), e);
             return e.toString();
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
index 6e93c9e..1c66ce8 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
@@ -87,6 +87,7 @@
 import com.fasterxml.jackson.core.JsonParseException;
 import com.fasterxml.jackson.databind.JsonMappingException;
 import com.fasterxml.jackson.databind.JsonNode;
+
 import io.netty.handler.codec.http.HttpResponseStatus;
 
 public class QueryServiceServlet extends AbstractQueryApiServlet {
@@ -449,10 +450,11 @@
         param.setStatementParams(
                 getOptStatementParameters(jsonRequest, jsonRequest.fieldNames(), JsonNode::get, v -> v));
         param.setMultiStatement(getOptBoolean(jsonRequest, Parameter.MULTI_STATEMENT, true));
-        setJsonOptionalParameters(jsonRequest, optionalParameters);
+        setJsonOptionalParameters(jsonRequest, param, optionalParameters);
     }
 
-    protected void setJsonOptionalParameters(JsonNode jsonRequest, Map<String, String> optionalParameters) {
+    protected void setJsonOptionalParameters(JsonNode jsonRequest, QueryServiceRequestParameters param,
+            Map<String, String> optionalParameters) {
         // allows extensions to set extra parameters
     }
 
@@ -474,10 +476,11 @@
         } catch (JsonParseException | JsonMappingException e) {
             GlobalConfig.ASTERIX_LOGGER.log(Level.ERROR, e.getMessage(), e);
         }
-        setOptionalParameters(request, optionalParameters);
+        setOptionalParameters(request, param, optionalParameters);
     }
 
-    protected void setOptionalParameters(IServletRequest request, Map<String, String> optionalParameters) {
+    protected void setOptionalParameters(IServletRequest request, QueryServiceRequestParameters param,
+            Map<String, String> optionalParameters) {
         // allows extensions to set extra parameters
     }
 
@@ -538,7 +541,7 @@
         Charset resultCharset = HttpUtil.setContentType(response, HttpUtil.ContentType.APPLICATION_JSON, request);
         PrintWriter httpWriter = response.writer();
         SessionOutput sessionOutput = createSessionOutput(httpWriter);
-        QueryServiceRequestParameters param = new QueryServiceRequestParameters();
+        QueryServiceRequestParameters param = newRequestParameters();
         try {
             // buffer the output until we are ready to set the status of the response message correctly
             sessionOutput.hold();
@@ -748,6 +751,10 @@
         pw.print(",\n");
     }
 
+    protected QueryServiceRequestParameters newRequestParameters() {
+        return new QueryServiceRequestParameters();
+    }
+
     private static boolean isJsonFormat(String format) {
         return format.startsWith(HttpUtil.ContentType.APPLICATION_JSON)
                 || format.equalsIgnoreCase(HttpUtil.ContentType.JSON);
