github.com/phrase/openapi@v0.0.0-20240514140800-49e8a106740e/openapi-generator/templates/java/libraries/native/api.mustache (about)

     1  {{>licenseInfo}}
     2  package {{package}};
     3  
     4  import {{invokerPackage}}.ApiClient;
     5  import {{invokerPackage}}.ApiException;
     6  import {{invokerPackage}}.Pair;
     7  
     8  {{#imports}}
     9  import {{import}};
    10  {{/imports}}
    11  
    12  import com.fasterxml.jackson.core.type.TypeReference;
    13  import com.fasterxml.jackson.databind.ObjectMapper;
    14  
    15  import java.io.IOException;
    16  import java.io.InputStream;
    17  import java.net.URI;
    18  import java.net.http.HttpClient;
    19  import java.net.http.HttpRequest;
    20  import java.net.http.HttpResponse;
    21  import java.time.Duration;
    22  import java.util.function.Consumer;
    23  
    24  {{^fullJavaUtil}}
    25  import java.util.ArrayList;
    26  import java.util.StringJoiner;
    27  import java.util.List;
    28  import java.util.Map;
    29  {{/fullJavaUtil}}
    30  
    31  {{#asyncNative}}
    32  import java.util.concurrent.CompletableFuture;
    33  {{/asyncNative}}
    34  
    35  {{>generatedAnnotation}}
    36  {{#operations}}
    37  public class {{classname}} {
    38    private final HttpClient memberVarHttpClient;
    39    private final ObjectMapper memberVarObjectMapper;
    40    private final String memberVarBaseUri;
    41    private final Consumer<HttpRequest.Builder> memberVarInterceptor;
    42    private final Duration memberVarReadTimeout;
    43    private final Consumer<HttpResponse<InputStream>> memberVarResponseInterceptor;
    44  
    45    public {{classname}}() {
    46      this(new ApiClient());
    47    }
    48  
    49    public {{classname}}(ApiClient apiClient) {
    50      memberVarHttpClient = apiClient.getHttpClient();
    51      memberVarObjectMapper = apiClient.getObjectMapper();
    52      memberVarBaseUri = apiClient.getBaseUri();
    53      memberVarInterceptor = apiClient.getRequestInterceptor();
    54      memberVarReadTimeout = apiClient.getReadTimeout();
    55      memberVarResponseInterceptor = apiClient.getResponseInterceptor();
    56    }
    57  
    58    {{#operation}}
    59    /**
    60     * {{summary}}
    61     * {{notes}}
    62     {{#allParams}}
    63     * @param {{paramName}} {{description}}{{#required}} (required){{/required}}{{^required}} (optional{{^isContainer}}{{#defaultValue}}, default to {{.}}{{/defaultValue}}){{/isContainer}}{{/required}}
    64     {{/allParams}}
    65     {{#returnType}}
    66     * @return {{returnType}}
    67     {{/returnType}}
    68     * @throws ApiException if fails to make API call
    69     {{#isDeprecated}}
    70     * @deprecated
    71     {{/isDeprecated}}
    72     {{#externalDocs}}
    73     * {{description}}
    74     * @see <a href="{{url}}">{{summary}} Documentation</a>
    75     {{/externalDocs}}
    76     */
    77    {{#isDeprecated}}
    78    @Deprecated
    79    {{/isDeprecated}}
    80    public {{#returnType}}{{#asyncNative}}CompletableFuture<{{{returnType}}}>{{/asyncNative}}{{^asyncNative}}{{{returnType}}}{{/asyncNative}}{{/returnType}}{{^returnType}}{{#asyncNative}}CompletableFuture<Void>{{/asyncNative}}{{^asyncNative}}void{{/asyncNative}}{{/returnType}} {{operationId}} ({{#allParams}}{{{dataType}}} {{paramName}}{{^-last}}, {{/-last}}{{/allParams}}) throws ApiException {
    81      {{#allParams}}
    82      {{#required}}
    83      // verify the required parameter '{{paramName}}' is set
    84      if ({{paramName}} == null) {
    85      {{#asyncNative}}
    86          return CompletableFuture.failedFuture(new ApiException(400, "Missing the required parameter '{{paramName}}' when calling {{operationId}}"));
    87      {{/asyncNative}}
    88      {{^asyncNative}}
    89          throw new ApiException(400, "Missing the required parameter '{{paramName}}' when calling {{operationId}}");
    90      {{/asyncNative}}
    91      }
    92      {{/required}}
    93      {{/allParams}}
    94  
    95      HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder();
    96  
    97      {{! Switch delimiters for baseName so we can write constants like "{query}" }}
    98      String localVarPath = "{{{path}}}"{{#pathParams}}
    99          .replace({{=<% %>=}}"{<%baseName%>}"<%={{ }}=%>, ApiClient.urlEncode({{{paramName}}}.toString())){{/pathParams}};
   100  
   101      {{#hasQueryParams}}
   102      {{javaUtilPrefix}}List<Pair> localVarQueryParams = new {{javaUtilPrefix}}ArrayList<>();
   103      {{#queryParams}}
   104        {{#collectionFormat}}
   105      localVarQueryParams.addAll(ApiClient.parameterToPairs("{{{collectionFormat}}}", "{{baseName}}", {{paramName}}));
   106        {{/collectionFormat}}
   107        {{^collectionFormat}}
   108      localVarQueryParams.addAll(ApiClient.parameterToPairs("{{baseName}}", {{paramName}}));
   109        {{/collectionFormat}}
   110      {{/queryParams}}
   111  
   112      if (!localVarQueryParams.isEmpty()) {
   113        {{javaUtilPrefix}}StringJoiner queryJoiner = new StringJoiner("&");
   114        localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue()));
   115        localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString()));
   116      } else {
   117        localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath));
   118      }
   119      {{/hasQueryParams}}
   120      {{^hasQueryParams}}
   121      localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath));
   122      {{/hasQueryParams}}
   123  
   124      {{#headerParams}}
   125      if ({{paramName}} != null) {
   126        localVarRequestBuilder.header("{{baseName}}", {{paramName}}.toString());
   127      }
   128      {{/headerParams}}
   129      {{#bodyParam}}
   130      localVarRequestBuilder.header("Content-Type", "application/json");
   131      {{/bodyParam}}
   132      localVarRequestBuilder.header("Accept", "application/json");
   133  
   134      {{^asyncNative}}
   135      try {
   136      {{/asyncNative}}
   137      {{#asyncNative}}
   138        {{#bodyParam}}
   139      try {
   140        {{/bodyParam}}
   141      {{/asyncNative}}
   142        {{#bodyParam}}
   143        byte[] localVarPostBody = memberVarObjectMapper.writeValueAsBytes({{paramName}});
   144        localVarRequestBuilder.method("{{httpMethod}}", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody));
   145        {{/bodyParam}}
   146        {{^bodyParam}}
   147        localVarRequestBuilder.method("{{httpMethod}}", HttpRequest.BodyPublishers.noBody());
   148        {{/bodyParam}}
   149        if (memberVarReadTimeout != null) {
   150          localVarRequestBuilder.timeout(memberVarReadTimeout);
   151        }
   152        if (memberVarInterceptor != null) {
   153          memberVarInterceptor.accept(localVarRequestBuilder);
   154        }
   155        {{^asyncNative}}
   156        HttpResponse<InputStream> localVarResponse = memberVarHttpClient.send(
   157        localVarRequestBuilder.build(),
   158        HttpResponse.BodyHandlers.ofInputStream());
   159        if (memberVarResponseInterceptor != null) {
   160          memberVarResponseInterceptor.accept(localVarResponse);
   161        }
   162        if (localVarResponse.statusCode()/ 100 != 2) {
   163            throw new ApiException(localVarResponse.statusCode(),
   164                "{{operationId}} call received non-success response",
   165                localVarResponse.headers(),
   166                localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes()));
   167        }
   168        {{#returnType}}
   169        return memberVarObjectMapper.readValue(localVarResponse.body(), new TypeReference<{{{returnType}}}>() {});
   170        {{/returnType}}
   171        {{/asyncNative}}
   172        {{#asyncNative}}
   173        return memberVarHttpClient.sendAsync(
   174                localVarRequestBuilder.build(),
   175                HttpResponse.BodyHandlers.ofString()).thenComposeAsync(localVarResponse -> {
   176            if (localVarResponse.statusCode()/ 100 != 2) {
   177                return CompletableFuture.failedFuture(new ApiException(localVarResponse.statusCode(),
   178                    "{{operationId}} call received non-success response",
   179                    localVarResponse.headers(),
   180                    localVarResponse.body())
   181                );
   182            } else {
   183                 try {
   184                    return CompletableFuture.completedFuture(
   185                        {{#returnType}}
   186                            memberVarObjectMapper.readValue(localVarResponse.body(), new TypeReference<{{{returnType}}}>() {})
   187                        {{/returnType}}
   188                        {{^returnType}}
   189                            null
   190                        {{/returnType}}
   191                    );
   192                } catch (IOException e) {
   193                    return CompletableFuture.failedFuture(new ApiException(e));
   194                }
   195            }
   196        });
   197        {{/asyncNative}}
   198      {{#asyncNative}}
   199      {{#bodyParam}}
   200      } catch (IOException e) {
   201        return CompletableFuture.failedFuture(new ApiException(e));
   202      }
   203      {{/bodyParam}}
   204      {{/asyncNative}}
   205      {{^asyncNative}}
   206      } catch (IOException e) {
   207        throw new ApiException(e);
   208      }
   209      {{/asyncNative}}
   210      {{^asyncNative}}
   211      catch (InterruptedException e) {
   212        Thread.currentThread().interrupt();
   213        throw new ApiException(e);
   214      }
   215      {{/asyncNative}}
   216    }
   217    {{/operation}}
   218  }
   219  {{/operations}}