public String asJson(final Throwable ex) { final CharBuf buffer = CharBuf.create(255); buffer.add('{'); buffer.addLine().indent(5).addJsonFieldName("message") .asJsonString(ex.getMessage()).addLine(','); buffer.addLine().indent(5).addJsonFieldName("exception") .asJsonString(ex.getClass().getSimpleName()).addLine(','); buffer.addLine().indent(5).addJsonFieldName("causeMessage") .asJsonString(ex.getCause().getMessage()).addLine(','); buffer.addLine().indent(5).addJsonFieldName("cause2Message") .asJsonString(ex.getCause().getCause().getMessage()).addLine(','); buffer.addLine().indent(5).addJsonFieldName("cause3Message") .asJsonString(ex.getCause().getCause().getCause().getMessage()).addLine(','); buffer.addLine().indent(5).addJsonFieldName("cause4Message") .asJsonString(ex.getCause().getCause().getCause().getCause().getMessage()).addLine(','); buffer.addLine().indent(5).addJsonFieldName("stackTrace").addLine(); buffer.add(','); buffer.addLine().indent(5).addJsonFieldName("fullStackTrace").addLine(); buffer.add('}');
public static void stackTraceToJson(CharBuf buffer, StackTraceElement[] stackTrace) { if (stackTrace.length == 0) { buffer.addLine("[]"); return; } buffer.multiply(' ', 16).addLine('['); for (int index = 0; index < stackTrace.length; index++) { StackTraceElement element = stackTrace[index]; if (element.getClassName().contains("Exceptions")) { continue; } buffer.indent(17).add("[ ").asJsonString(element.getMethodName()) .add(','); buffer.indent(3).asJsonString(element.getClassName()); if (element.getLineNumber() > 0) { buffer.add(","); buffer.indent(3).asJsonString("" + element.getLineNumber()) .addLine(" ],"); } else { buffer.addLine(" ],"); } } buffer.removeLastChar(); //trailing \n buffer.removeLastChar(); //trailing , buffer.addLine().multiply(' ', 15).add(']'); }
public String encodeMethodCalls(String returnAddress, Collection<MethodCall<Object>> methodCalls) { CharBuf buf = bufRef.get(); buf.recycle(); buf.addChar(PROTOCOL_MARKER); buf.addChar(PROTOCOL_MESSAGE_TYPE_GROUP); buf.addChar(PROTOCOL_SEPARATOR); buf.add(returnAddress); buf.addChar(PROTOCOL_SEPARATOR); buf.addChar(PROTOCOL_MESSAGE_SEPARATOR); for (MethodCall<Object> methodCall : methodCalls) { encodeMethodCallAsString(buf, methodCall); buf.addChar(PROTOCOL_MESSAGE_SEPARATOR); } return buf.toString(); }
public final void serializeCollection( Collection<?> collection, CharBuf builder ) { if ( collection.size () == 0 ) { builder.addChars ( EMPTY_LIST_CHARS ); return; } builder.addChar( '[' ); for ( Object o : collection ) { if (o == null) { builder.addNull(); } else { serializeObject(o, builder); } builder.addChar ( ',' ); } builder.removeLastChar (); builder.addChar( ']' ); }
private String getURICreateParamsIfNeeded(HttpRequest request) { String uri = request.getUri(); final MultiMap<String, String> params = request.params(); if (params != null && params.size() > 0) { CharBuf charBuf = CharBuf.create(request.getUri().length() + params.size() * 10); charBuf.add(request.getUri()).add("?"); for (Map.Entry<String, Collection<String>> entry : params) { try { String key = URLEncoder.encode(entry.getKey(), "UTF-8"); final Collection<String> values = entry.getValue(); for (String val : values) { val = URLEncoder.encode(val, "UTF-8"); charBuf.addString(key).add('=').addString(val).add('&'); } } catch (UnsupportedEncodingException e) { errorHandler.accept(e); throw new IllegalStateException(e); } } charBuf.removeLastChar(); uri = charBuf.toString(); } return uri; }
public static String decodeForSure( CharBuf charBuf, char[] chars, int start, int to ) { charBuf.recycle(); charBuf.decodeJsonString(chars, start, to); return charBuf.toString(); }
@Override public void serializeInstance(JsonSerializerImpl serializer, Object instance, CharBuf builder, boolean includeTypeInfo) { final Map<String, FieldAccess> fieldAccessors = serializer.getFields(instance.getClass ()); final Collection<FieldAccess> values = fieldAccessors.values (); if (includeTypeInfo) { builder.addString("{\"class\":"); builder.addQuoted(instance.getClass().getName()); builder.addChar ( ',' ); } else { builder.addChar('{'); } int index = 0; for ( FieldAccess fieldAccess : values ) { if (serializer.serializeField ( instance, fieldAccess, builder ) ) { builder.addChar ( ',' ); index++; } } if ( index > 0 ) { builder.removeLastChar(); } builder.addChar( '}' ); } }
public final void serializeString( String str, CharBuf builder ) { if (encodeStrings) { if (stringCache == null) { stringCache = new SimpleLRUCache<>(1000); encodedJsonChars = CharBuf.create(str.length()); } String encodedString = stringCache.get(str); if (encodedString == null) { encodedJsonChars.asJsonString(str, asciiOnly); encodedString = encodedJsonChars.toStringAndRecycle(); stringCache.put(str, encodedString); } builder.add(encodedString); } else { builder.addQuoted(str); } }
private void encodeResponseAsString(CharBuf buf, Response<Object> response, boolean encodeAddress) { buf.addChar(PROTOCOL_MESSAGE_TYPE_RESPONSE); buf.addChar(PROTOCOL_SEPARATOR); buf.add(response.id()); buf.addChar(PROTOCOL_SEPARATOR); buf.add(response.address()); buf.addChar(PROTOCOL_SEPARATOR); buf.addChar(PROTOCOL_SEPARATOR); //reserved for header buf.addChar(PROTOCOL_SEPARATOR); //reserved for params buf.addChar(PROTOCOL_SEPARATOR); //reserved for object name buf.addChar(PROTOCOL_SEPARATOR); //reserved for method name buf.add(response.timestamp()); buf.addChar(PROTOCOL_SEPARATOR); buf.add(response.wasErrors() ? 1 : 0); buf.addChar(PROTOCOL_SEPARATOR); final Object body = response.body(); final JsonSerializer serializer = jsonSerializer.get(); if (body != null) { serializer.serialize(buf, body); } else { buf.addNull(); } }
public final void serializeArray ( TypeType componentType, Object objectArray, CharBuf builder ) { switch (componentType) { case STRING: //optimization String[] array = (String[]) objectArray; final int length = array.length; builder.addChar( '[' ); for ( int index = 0; index < length; index++ ) { serializeString( array[index], builder ); builder.addChar ( ',' ); } builder.removeLastChar (); builder.addChar( ']' ); break; default: serializeArray(objectArray, builder); } } @Override
@Override public final void serializeDate( JsonSerializerInternal jsonSerializer, Date date, CharBuf builder ) { String string = dateCache.get ( date ); if ( string == null) { CharBuf buf = CharBuf.create ( Dates.JSON_TIME_LENGTH ); Dates.jsonDateChars ( calendar, date, buf ); string = buf.toString(); dateCache.put ( date, string ); } builder.addChars ( FastStringUtils.toCharArray( string ) ); } }
private static String decodeForSure( char[] chars, int start, int to ) { CharBuf builder = CharBuf.create( to - start ); builder.decodeJsonString(chars, start, to); return builder.toString(); }
public CharBuf prettyPrintCollection(Collection values, boolean type, int indent) { add('['); for (Object value : values) { prettyPrintObject(value, type, indent); add(','); } if (values.size()>0) { removeLastChar(); } add(']'); return this; }
public final CharBuf addJsonFieldName( String str ) { return addJsonFieldName ( FastStringUtils.toCharArray ( str ) ); }
private void encodeHeadersAndParams(CharBuf buf, MultiMap<String, String> headerOrParams) { if (headerOrParams == null) { return; } final Map<? extends String, ? extends Collection<String>> map = headerOrParams.baseMap(); final Set<? extends Map.Entry<? extends String, ? extends Collection<String>>> entries = map.entrySet(); for (Map.Entry<? extends String, ? extends Collection<String>> entry : entries) { final Collection<String> values = entry.getValue(); if (values.size() == 0) { continue; } buf.add(entry.getKey()); buf.addChar(Protocol.PROTOCOL_KEY_HEADER_DELIM); for (String value : values) { buf.add(value); buf.addChar(Protocol.PROTOCOL_VALUE_HEADER_DELIM); } buf.addChar(Protocol.PROTOCOL_ENTRY_HEADER_DELIM); } } }
@Override public final void serializeString ( JsonSerializerInternal serializer, String string, CharBuf builder ) { if (encodeStrings) { builder.asJsonString(string, asAscii); } else { builder.addQuoted(string); } } }