code: static String getCauseMessage(Throwable throwable) {
          List<Throwable> list = new ArrayList<>();
          while (throwable != null && list.contains(throwable) == false) {
              list.add(throwable);
              throwable = throwable.getCause();
          }
          return list.get(0).getMessage();
      }
docs: TODO: refactor to some util class. This is stolen...ehrr... borrowed from Apache ExceptionUtils