in src/main/java/org/apache/sling/servlets/resolver/internal/defaults/DefaultErrorHandlerServlet.java [135:196]
protected void renderJson(ServletRequest req, ServletResponse res, String statusMessage, String requestUri,
String servletName, int statusCode) throws IOException {
HttpServletResponse response = (HttpServletResponse)res;
response.setStatus(statusCode);
response.setContentType(JSON_CONTENT_TYPE);
response.setCharacterEncoding("UTF-8");
// send the error as JSON
try (JsonGenerator jsonGenerator = Json.createGenerator(res.getWriter())) {
jsonGenerator.writeStartObject();
jsonGenerator.write("status", statusCode);
String msg = (String)req.getAttribute(SlingConstants.ERROR_MESSAGE);
if (msg != null && !msg.isEmpty()) {
jsonGenerator.write("message", statusMessage);
}
if (requestUri != null && !requestUri.isEmpty()) {
jsonGenerator.write("requestUri", requestUri);
}
if (servletName != null && !servletName.isEmpty()) {
jsonGenerator.write("servletName", servletName);
}
// SLING-10615 - for backward compatibility check for either a
// String or Class value
Object exceptionTypeObj = req.getAttribute(SlingConstants.ERROR_EXCEPTION_TYPE);
String exceptionType = null;
if (exceptionTypeObj instanceof String) {
exceptionType = (String)exceptionTypeObj;
} else if (exceptionTypeObj instanceof Class) {
exceptionType = ((Class<?>)exceptionTypeObj).getName();
}
if (exceptionType != null && !exceptionType.isEmpty()) {
jsonGenerator.write("exceptionType", exceptionType);
}
// dump the stack trace
if (req.getAttribute(SlingConstants.ERROR_EXCEPTION) instanceof Throwable) {
final Throwable throwable = (Throwable) req.getAttribute(SlingConstants.ERROR_EXCEPTION);
try (StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw)) {
printStackTrace(pw, throwable);
jsonGenerator.write("exception", sw.toString());
}
}
// dump the request progress tracker
if (req instanceof SlingHttpServletRequest) {
// dump the request progress tracker
final RequestProgressTracker tracker = ((SlingHttpServletRequest)req).getRequestProgressTracker();
StringWriter strWriter = new StringWriter();
try (PrintWriter progressWriter = new PrintWriter(strWriter)) {
tracker.dump(progressWriter);
}
jsonGenerator.write("requestProgress", strWriter.toString());
}
jsonGenerator.writeEnd();
}
}