docs: public CreateJobResponse createJob(CreateJobRequest request) {
          checkNotNull(request, "request should not be null.");
          checkStringNotEmpty(request.getName(), "The name should not be null or empty string.");
          checkStringNotEmpty(request.getVmType(), "The vmType should not be null or empty string.");
          checkStringNotEmpty(request.getJobDagJson(), "The jobDagJson should not be null or empty string.");
          checkIsTrue(request.getVmCount() > 0, "The vmCount should greater than 0");
  
          StringWriter writer = new StringWriter();
          try {
              JsonGenerator jsonGenerator = JsonUtils.jsonGeneratorOf(writer);
              jsonGenerator.writeStartObject();
              jsonGenerator.writeStringField("name", request.getName());
              jsonGenerator.writeStringField("vmType", request.getVmType());
              jsonGenerator.writeNumberField("vmCount", request.getVmCount());
              jsonGenerator.writeStringField("jobDagJson", request.getJobDagJson());
              if (request.getJobTimeoutInSeconds() != null) {
                  jsonGenerator.writeNumberField("jobTimeoutInSeconds", request.getJobTimeoutInSeconds());
              }
              if (request.getMemo() != null) {
                  jsonGenerator.writeStringField("memo", request.getMemo());
              }
              jsonGenerator.writeEndObject();
              jsonGenerator.close();
          } catch (IOException e) {
              throw new BceClientException("Fail to generate json", e);
          }
  
          byte[] json = null;
          try {
              json = writer.toString().getBytes(DEFAULT_ENCODING);
          } catch (UnsupportedEncodingException e) {
              throw new BceClientException("Fail to get UTF-8 bytes", e);
          }
  
          InternalRequest internalRequest = this.createRequest(request, HttpMethodName.POST, JOB);
          internalRequest.addHeader(Headers.CONTENT_LENGTH, String.valueOf(json.length));
          internalRequest.addHeader(Headers.CONTENT_TYPE, "application/json");
          internalRequest.setContent(RestartableInputStream.wrap(json));
  
          internalRequest.addParameter("run", "immediate");
          if (request.getClientToken() != null) {
              internalRequest.addParameter("clientToken", request.getClientToken());
          }
  
          return this.invokeHttpClient(internalRequest, CreateJobResponse.class);
      }