private static JSONObject appendFullStackTrace (JSONObject jsonMetadata, Throwable t) {
        JSONArray stackArray = new JSONArray();

        Throwable throwable = t;

        StackTraceElement[] stackTraceElements;

        boolean first = true;

        // walk up the throwable's call stack:
        while (throwable != null) {
            stackArray.put((first ? "Exception " : "Caused by: ") + throwable.getClass().getName() + (throwable.getMessage() != null ? ": " + throwable.getMessage() : ""));

            stackTraceElements = throwable.getStackTrace();

            for (int i = 0; i < stackTraceElements.length; i++) {
                stackArray.put(stackTraceElements[i].toString());
            }

            throwable = throwable.getCause();

            first = false;
        }

        try {
            if (null == jsonMetadata) {
                jsonMetadata = new JSONObject();
            }
            jsonMetadata.put("$stacktrace", stackArray);
            jsonMetadata.put("$exceptionMessage", t.getLocalizedMessage ());
            jsonMetadata.put ("$exceptionClass", t.getClass().getName());
        }
        catch (JSONException e) {
            // ignore.  getting the stacktrace is best effort
        }
        return jsonMetadata;
    }
private static JSONObject appendFullStackTrace ( JSONObject jsonMetadata , Throwable t ) { JSONArray stackArray = new JSONArray ( ) ; Throwable throwable = t ; StackTraceElement [ ] stackTraceElements ; boolean first = true ; while ( throwable != null ) { stackArray . put ( ( first ? "Exception " : "Caused by: " ) + throwable . getClass ( ) . getName ( ) + ( throwable . getMessage ( ) != null ? ": " + throwable . getMessage ( ) : "" ) ) ; stackTraceElements = throwable . getStackTrace ( ) ; for ( int i = 0 ; i < stackTraceElements . length ; i ++ ) { stackArray . put ( stackTraceElements [ i ] . toString ( ) ) ; } throwable = throwable . getCause ( ) ; first = false ; } try { if ( null == jsonMetadata ) { jsonMetadata = new JSONObject ( ) ; } jsonMetadata . put ( "$stacktrace" , stackArray ) ; jsonMetadata . put ( "$exceptionMessage" , t . getLocalizedMessage ( ) ) ; jsonMetadata . put ( "$exceptionClass" , t . getClass ( ) . getName ( ) ) ; } catch ( JSONException e ) { } return jsonMetadata ; }
append the full stacktrace to a $stacktrace key JSONArray in the passed jsonMetadata object
and return it.