docs: @Override
      public Builder claim(String name, Object value) throws InvalidClaimException {
          if (isValidClaim(name, value)) {
              if (name.equals(Claims.AUDIENCE)) {
                  if (value instanceof ArrayList) {
                      this.audience((ArrayList) value);
                  } else if (value instanceof String) {
                      String[] auds = ((String) value).split(" ");
                      ArrayList<String> audList = new ArrayList<String>();
                      for (String aud : auds) {
                          if (!aud.isEmpty()) {
                              audList.add(aud.trim());
                          }
                      }
                      if (!audList.isEmpty()) {
                          this.audience(audList);
                      }
                  } else {
                      String msg = Tr.formatMessage(tc, "JWT_INVALID_CLAIM_VALUE_TYPE", new Object[] { Claims.AUDIENCE });
                      throw new InvalidClaimException(msg);
                  }
              } else if (name.equals(Claims.EXPIRATION)) {
                  if (value instanceof Long) {
                      this.expirationTime((Long) value);
                  } else if (value instanceof Integer) {
                      this.expirationTime(((Integer) value).longValue());
                  } else {
                      String msg = Tr.formatMessage(tc, "JWT_INVALID_CLAIM_VALUE_TYPE", new Object[] { Claims.EXPIRATION });
                      throw new InvalidClaimException(msg);
                  }
              } else if (name.equals(Claims.ISSUED_AT)) {
                  if (value instanceof Long) {
                      this.issueTime((Long) value);
                  } else if (value instanceof Integer) {
                      this.expirationTime(((Integer) value).longValue());
                  } else {
                      String msg = Tr.formatMessage(tc, "JWT_INVALID_CLAIM_VALUE_TYPE", new Object[] { Claims.ISSUED_AT });
                      throw new InvalidClaimException(msg);
                  }
              } else if (name.equals(Claims.NOT_BEFORE)) {
                  if (value instanceof Long) {
                      this.notBefore((Long) value);
                  } else if (value instanceof Integer) {
                      this.expirationTime(((Integer) value).longValue());
                  } else {
                      String msg = Tr.formatMessage(tc, "JWT_INVALID_CLAIM_VALUE_TYPE", new Object[] { Claims.NOT_BEFORE });
                      throw new InvalidClaimException(msg);
                  }
              } else if (name.equals(Claims.ISSUER) || name.equals(Claims.SUBJECT)) {
                  if (value instanceof String) {
                      if (name.equals(Claims.ISSUER)) {
                          this.issuer((String) value);
                      } else {
                          this.subject((String) value);
                      }
                  } else {
                      String msg = Tr.formatMessage(tc, "JWT_INVALID_CLAIM_VALUE_TYPE", new Object[] { name });
                      throw new InvalidClaimException(msg);
                  }
              } else {
                  claims.put(name, value);
              }
          }
          return this;
      }