SLING-7228: Don't close response writer when sending json responses.
diff --git a/src/main/java/org/apache/sling/servlets/get/impl/helpers/JsonRendererServlet.java b/src/main/java/org/apache/sling/servlets/get/impl/helpers/JsonRendererServlet.java
index c2bfb37..253df1e 100644
--- a/src/main/java/org/apache/sling/servlets/get/impl/helpers/JsonRendererServlet.java
+++ b/src/main/java/org/apache/sling/servlets/get/impl/helpers/JsonRendererServlet.java
@@ -17,6 +17,7 @@
package org.apache.sling.servlets.get.impl.helpers;
import java.io.IOException;
+import java.io.StringWriter;
import javax.json.Json;
import javax.json.stream.JsonGenerator;
@@ -116,22 +117,26 @@
// If no rendering options, use the plain toString() method, for
// backwards compatibility. Output might be slightly different
// with prettyPrint and no options
- Json.createGenerator(resp.getWriter()).write(traversor.getJSONObject()).close();
+ StringWriter writer = new StringWriter();
+ Json.createGenerator(writer).write(traversor.getJSONObject()).close();
+ resp.getWriter().write(writer.toString());
}
} else {
// We are not allowed to do the dump.
- // Send a 300
+ // Send a 300
String tidyUrl = (tidy) ? "tidy." : "";
resp.setStatus(HttpServletResponse.SC_MULTIPLE_CHOICES);
- JsonGenerator writer = Json.createGenerator(resp.getWriter());
- writer.writeStartArray();
+ StringWriter writer = new StringWriter();
+ JsonGenerator json = Json.createGenerator(writer);
+ json.writeStartArray();
while (allowedLevel >= 0) {
- writer.write(r.getResourceMetadata().getResolutionPath() + "." + tidyUrl + allowedLevel + ".json");
+ json.write(r.getResourceMetadata().getResolutionPath() + "." + tidyUrl + allowedLevel + ".json");
allowedLevel--;
}
- writer.writeEnd();
- writer.close();
+ json.writeEnd();
+ json.close();
+ resp.getWriter().write(writer.toString());
}
} catch (Exception je) {
reportException(je);