protected Request buildRequest()

in odps-sdk/odps-sdk-core/src/main/java/com/aliyun/odps/rest/RestClient.java [623:715]


  protected Request buildRequest(String resource, String method, Map<String, String> params,
                                 Map<String, String> headers, String endpoint) {
    if (resource == null || !resource.startsWith("/")) {
      throw new IllegalArgumentException("Invalid resource: " + resource);
    }
    if (!StringUtils.isNullOrEmpty(prefix)) {
      if (prefix.startsWith("/")) {
        resource = prefix + resource;
      } else {
        throw new IllegalArgumentException("Invalid prefix: " + prefix + ", should start with '/'");
      }
    }

    if (endpoint == null) {
      throw new IllegalArgumentException("Odps endpoint required.");
    }

    Request req = new Request(this);

    // build URL with parameters
    StringBuilder url = new StringBuilder();
    url.append(endpoint).append(resource);

    if (params == null) {
      params = new HashMap<>();
    }

    if (!params.containsKey("curr_project") && !StringUtils.isNullOrEmpty(defaultProject)) {
      params.put("curr_project", defaultProject);
    }

    if (params.size() != 0) {

      req.setParameters(params);

      url.append('?');
      boolean first = true;
      for (Entry<String, String> kv : params.entrySet()) {

        if (first) {
          first = false;
        } else {
          url.append('&');
        }

        String key = kv.getKey();
        String value = kv.getValue();
        url.append(key);
        if (value != null && value.length() > 0) {
          value = ResourceBuilder.encode(value);
          url.append('=').append(value);
        }
      }
    }

    try {

      req.setURI(new URI(url.toString()));
      req.setMethod(Method.valueOf(method));

      Map<String, String> reqHeaders = req.getHeaders();

      if (!userDefinedHeaders.isEmpty()) {
        reqHeaders.putAll(userDefinedHeaders);
      }
      if (headers != null) {
        reqHeaders.putAll(headers);
      }

      req.setHeaders(reqHeaders);

      // set User-Agent
      if (req.getHeaders().get(Headers.USER_AGENT) == null && userAgent != null) {
        req.setHeader(Headers.USER_AGENT, userAgent);
        req.setHeader(Headers.ODPS_USER_AGENT, userAgent);
      }

      req.setHeader(Headers.DATE, DateUtils.formatRfc822Date(new Date()));

      // Sign the request
      account.getRequestSigner().sign(resource, req);
      if (appAccount != null) {
        appAccount.getRequestSigner().sign(resource, req);
      }
      if (appStsAccount != null) {
        appStsAccount.getRequestSigner().sign(resource, req);
      }
    } catch (URISyntaxException e) {
      throw new IllegalArgumentException(e.getMessage(), e);
    }

    return req;
  }