@Override public final void beginResponse(OutputStream stream) throws IOException { jsonWriter = new JSONWriter(stream); }
@Override public final void data(Data data) throws IOException { if (! shouldRender(data)) return; jsonWriter.beginArrayValue(); jsonWriter.beginObject(); jsonWriter.beginField("data"); renderValue(data,jsonWriter); jsonWriter.endField(); jsonWriter.endObject(); jsonWriter.endArrayValue(); }
/** Begins an object field */ public JSONWriter beginField(String fieldName) throws IOException { beginFieldOrArrayValue(); write("\"" + fieldName + "\":"); return this; }
@Override public final void endList(DataList<?> list) throws IOException { jsonWriter.endArray(); jsonWriter.endField(); jsonWriter.endObject(); if (level>0) jsonWriter.endArrayValue(); level--; }
@Override public final void beginList(DataList<?> list) throws IOException { if (level>0) jsonWriter.beginArrayValue(); jsonWriter.beginObject(); jsonWriter.beginField("errors"); jsonWriter.beginArray(); for (ErrorMessage error : list.request().errors()) { if (renderedRequests == null) renderedRequests = new IdentityHashMap<>(); renderedRequests.put(list.request(),list.request()); jsonWriter.beginArrayValue(); if (error.getCause() != null) { // render object jsonWriter.beginObject(); jsonWriter.beginField("error").value(error.toString()).endField(); jsonWriter.beginField("stacktrace").value(stackTraceAsString(error.getCause())).endField(); jsonWriter.endObject(); jsonWriter.value(error.toString()); jsonWriter.endArrayValue(); jsonWriter.endArray(); jsonWriter.endField(); jsonWriter.beginField("datalist"); jsonWriter.beginArray(); level++;
private boolean renderTrace() throws IOException { if (getExecution().trace().getTraceLevel() == 0) return false; jsonWriter.beginField("trace"); try { getExecution().trace().traceNode().accept(new TraceRenderingVisitor(jsonWriter)); } catch (WrappedIOException e) { throw e.getCause(); } jsonWriter.endField(); return true; }
/** Ends an object field */ public JSONWriter endField() throws IOException { endFieldOrArrayValue(); return this; }
/** Begins an array value */ public JSONWriter beginArrayValue() throws IOException { beginFieldOrArrayValue(); return this; }
@Override public void entering(TraceNode node) { try { jsonWriter.beginArray(); } catch (IOException e) { throw new WrappedIOException(e); } }
@Override public void leaving(TraceNode node) { try { jsonWriter.endArray(); } catch (IOException e) { throw new WrappedIOException(e); } }
/** Ends an array value */ public JSONWriter endArrayValue() throws IOException { endFieldOrArrayValue(); return this; }
@Override public void visit(TraceNode node) { if ( ! (node.payload() instanceof String)) return; // skip other info than trace messages try { jsonWriter.beginArrayValue(); if (node.timestamp() != 0) { // render object jsonWriter.beginObject(); jsonWriter.beginField("timestamp").value(node.timestamp()).endField(); jsonWriter.beginField("message").value(node.payload().toString()).endField(); jsonWriter.endObject(); } else { // render string jsonWriter.value(node.payload().toString()); } jsonWriter.endArrayValue(); } catch (IOException e) { throw new WrappedIOException(e); } }