server-templates/api.mustache (113 lines of code) (raw):
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package {{package}};
{{#imports}}
import {{import}};
{{/imports}}
import io.micrometer.core.annotation.Timed;
import io.micrometer.core.aop.MeterTag;
import java.util.Map;
import java.util.List;
import java.io.InputStream;
import jakarta.annotation.Nonnull;
import jakarta.annotation.security.RolesAllowed;
import {{javaxPackage}}.ws.rs.Consumes;
import {{javaxPackage}}.ws.rs.Produces;
import {{javaxPackage}}.ws.rs.DELETE;
import {{javaxPackage}}.ws.rs.GET;
import {{javaxPackage}}.ws.rs.HEAD;
import {{javaxPackage}}.ws.rs.PATCH;
import {{javaxPackage}}.ws.rs.POST;
import {{javaxPackage}}.ws.rs.PUT;
import {{javaxPackage}}.ws.rs.Path;
import {{javaxPackage}}.ws.rs.DefaultValue;
import {{javaxPackage}}.ws.rs.PathParam;
import {{javaxPackage}}.ws.rs.HeaderParam;
import {{javaxPackage}}.ws.rs.QueryParam;
import {{javaxPackage}}.ws.rs.FormParam;
import {{javaxPackage}}.ws.rs.core.Response;
import {{javaxPackage}}.servlet.http.HttpServletRequest;
import {{javaxPackage}}.servlet.http.HttpServletResponse;
import {{javaxPackage}}.ws.rs.core.Context;
import {{javaxPackage}}.ws.rs.core.SecurityContext;
import {{javaxPackage}}.inject.Inject;
import org.apache.polaris.core.context.RealmContext;
import org.eclipse.microprofile.faulttolerance.Timeout;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
{{#useBeanValidation}}
import {{javaxPackage}}.validation.constraints.*;
import {{javaxPackage}}.validation.Valid;
{{/useBeanValidation}}
{{#operations}}{{#operation}}{{#isMultipart}}import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput;
{{/isMultipart}}{{/operation}}{{/operations}}
{{!
Note that this template is copied /modified from
https://github.com/OpenAPITools/openapi-generator/blob/783e68c7acbbdcbb2282d167d1644b069f12d486/modules/openapi-generator/src/main/resources/JavaJaxRS/resteasy/api.mustache
It is updated to remove all swagger annotations
}}
/**
* The {{{baseName}}} API interface
*
* This file is automatically generated by the OpenAPI Code Generator based on configuration in the
* build.gradle file.
*
*/
@Path("{{contextPath}}{{commonPath}}"){{#hasConsumes}}
@Consumes({ {{#consumes}}"{{{mediaType}}}"{{^-last}}, {{/-last}}{{/consumes}} }){{/hasConsumes}}{{#hasProduces}}
@Produces({ {{#produces}}"{{{mediaType}}}"{{^-last}}, {{/-last}}{{/produces}} }){{/hasProduces}}
{{>generatedAnnotation}}
{{#operations}}
public class {{classname}} {
private static final Logger LOGGER = LoggerFactory.getLogger({{classname}}.class);
private final {{classname}}Service service;
@Inject
public {{classname}}({{classname}}Service service) {
this.service = service;
}
{{#operation}}
/**
* {{^notes}}{{{summary}}}{{/notes}}{{notes}}
*
* Response type: {@code {{{returnBaseType}}}}.
*{{#allParams}} @param {{paramName}} {{#required}}Required -{{/required}} {{description}}
*{{/allParams}}{{#responses}}
* @return {{{code}}} - {{{message}}}{{/responses}}
*/
@{{httpMethod}}{{#subresourceOperation}}
@Path("{{{path}}}"){{/subresourceOperation}}{{#hasConsumes}}
@Consumes({ {{#consumes}}"{{{mediaType}}}"{{^-last}}, {{/-last}}{{/consumes}} }){{/hasConsumes}}{{#hasProduces}}
@Produces({ {{#produces}}"{{{mediaType}}}"{{^-last}}, {{/-last}}{{/produces}} }){{/hasProduces}}{{#hasAuthMethods}}
{{#authMethods}}{{#isOAuth}}@RolesAllowed("**"){{/isOAuth}}{{/authMethods}}{{/hasAuthMethods}}
@Timed("{{metricsPrefix}}.{{baseName}}.{{nickname}}")
@Timeout
public Response {{nickname}}({{#isMultipart}}MultipartFormDataInput input,{{/isMultipart}}{{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{^isMultipart}}{{>formParams}},{{/isMultipart}}{{#isMultipart}}{{^isFormParam}},{{/isFormParam}}{{/isMultipart}}{{/allParams}}@Context @MeterTag(key="realm_id",expression="realmIdentifier") RealmContext realmContext,@Context SecurityContext securityContext) {
{{! Don't log form or header params in case there are secrets, e.g., OAuth tokens }}
LOGGER.atDebug().setMessage("Invoking {{baseName}} with params")
.addKeyValue("operation", "{{nickname}}"){{#allParams}}{{^isHeaderParam}}{{^isFormParam}}
.addKeyValue("{{paramName}}", {{^isBodyParam}}{{paramName}}{{/isBodyParam}}{{#isBodyParam}}String.valueOf({{paramName}}){{/isBodyParam}}){{/isFormParam}}{{/isHeaderParam}}{{/allParams}}
.log();
Response ret =
service.{{nickname}}({{#isMultipart}}input,{{/isMultipart}}{{#allParams}}{{^isMultipart}}{{paramName}},{{/isMultipart}}{{#isMultipart}}{{^isFormParam}}{{paramName}},{{/isFormParam}}{{/isMultipart}}{{/allParams}}realmContext,securityContext);
LOGGER.debug("Completed execution of {{nickname}} API with status code {}", ret.getStatus());
return ret;
}
{{/operation}}
}
{{/operations}}