docs: public ServiceCall<AnalysisResults> analyze(AnalyzeOptions analyzeOptions) {
      Validator.notNull(analyzeOptions, "analyzeOptions cannot be null");
      String[] pathSegments = { "v1/analyze" };
      RequestBuilder builder = RequestBuilder.post(RequestBuilder.constructHttpUrl(getEndPoint(), pathSegments));
      builder.query("version", versionDate);
      Map<String, String> sdkHeaders = SdkCommon.getSdkHeaders("natural-language-understanding", "v1", "analyze");
      for (Entry<String, String> header : sdkHeaders.entrySet()) {
        builder.header(header.getKey(), header.getValue());
      }
      builder.header("Accept", "application/json");
      final JsonObject contentJson = new JsonObject();
      contentJson.add("features", GsonSingleton.getGson().toJsonTree(analyzeOptions.features()));
      if (analyzeOptions.text() != null) {
        contentJson.addProperty("text", analyzeOptions.text());
      }
      if (analyzeOptions.html() != null) {
        contentJson.addProperty("html", analyzeOptions.html());
      }
      if (analyzeOptions.url() != null) {
        contentJson.addProperty("url", analyzeOptions.url());
      }
      if (analyzeOptions.clean() != null) {
        contentJson.addProperty("clean", analyzeOptions.clean());
      }
      if (analyzeOptions.xpath() != null) {
        contentJson.addProperty("xpath", analyzeOptions.xpath());
      }
      if (analyzeOptions.fallbackToRaw() != null) {
        contentJson.addProperty("fallback_to_raw", analyzeOptions.fallbackToRaw());
      }
      if (analyzeOptions.returnAnalyzedText() != null) {
        contentJson.addProperty("return_analyzed_text", analyzeOptions.returnAnalyzedText());
      }
      if (analyzeOptions.language() != null) {
        contentJson.addProperty("language", analyzeOptions.language());
      }
      if (analyzeOptions.limitTextCharacters() != null) {
        contentJson.addProperty("limit_text_characters", analyzeOptions.limitTextCharacters());
      }
      builder.bodyJson(contentJson);
      return createServiceCall(builder.build(), ResponseConverterUtils.getObject(AnalysisResults.class));
    }