@Override
  public String getMessage() {
    List<String> msgList = new ArrayList<String>();
    String existing = super.getMessage();

    if (existing != null) {
      msgList.add(existing);
    }

    if (status.getStatusCode() != 408) {
      msgList.add(String.format("<Status=%d, Reason=%s>",
                  status.getStatusCode(), status.getReasonPhrase()));
    }

    if (json != null) {
      msgList.add("<JSON="+json+">");
    }

    if (request != null) {
      msgList.add("Request="+request+">");

      if (request instanceof HttpEntityEnclosingRequest) {
        HttpEntityEnclosingRequest eReq = (HttpEntityEnclosingRequest)request;
        HttpEntity entity = eReq.getEntity();
        try {
          if (entity != null && entity.getContent() != null) {
            InputStream strm = entity.getContent();
            strm.reset();
            msgList.add("<Request Body="+IOUtils.toString(strm)+">");
          }
        } catch (IOException ex) {
          // In exception. What do we do here?
          msgList.add("<IOException for reading request>");
        } catch (IllegalStateException ex) {
          msgList.add("<IllegalStateException while reading request>");
        }
      }
    }

    return StringUtils.join(msgList, ",");
  }