public static String getExceptionMessage(final Throwable e) {
        if (e.getCause() != null) {
            String msg = getExceptionMessage(e.getCause());
            if (!msg.equalsIgnoreCase(e.getClass().getName())) {
                return msg;
            }
        }

        if (e.getLocalizedMessage() != null) {
            return e.getLocalizedMessage();
        } else if (e.getMessage() != null) {
            return e.getMessage();
        } else if (e.getClass().getCanonicalName() != null) {
            return e.getClass().getCanonicalName();
        } else {
            return e.getClass().getName();
        }
    }