forked from loafle/openapi-generator-original
Add support for @GZIP in jaxrs-spec Quarkus templates (#13983)
* adjust templates for @GZIP * add test * remove debug output
This commit is contained in:
@@ -25,6 +25,8 @@ import org.openapitools.codegen.meta.features.DocumentationFeature;
|
||||
import java.io.File;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.openapitools.codegen.languages.features.GzipFeatures.USE_GZIP_FEATURE;
|
||||
|
||||
public class JavaJAXRSSpecServerCodegen extends AbstractJavaJAXRSServerCodegen {
|
||||
|
||||
public static final String INTERFACE_ONLY = "interfaceOnly";
|
||||
@@ -45,6 +47,8 @@ public class JavaJAXRSSpecServerCodegen extends AbstractJavaJAXRSServerCodegen {
|
||||
private boolean generatePom = true;
|
||||
private boolean generateBuilders = false;
|
||||
private boolean useSwaggerAnnotations = true;
|
||||
|
||||
protected boolean useGzipFeature = false;
|
||||
private boolean useJackson = false;
|
||||
private String openApiSpecFileLocation = "src/main/openapi/openapi.yaml";
|
||||
|
||||
@@ -155,6 +159,7 @@ public class JavaJAXRSSpecServerCodegen extends AbstractJavaJAXRSServerCodegen {
|
||||
} else if(OPEN_LIBERTY_LIBRARY.equals(library)) {
|
||||
openApiSpecFileLocation = "src/main/webapp/META-INF/openapi.yaml";
|
||||
}
|
||||
|
||||
additionalProperties.put(OPEN_API_SPEC_FILE_LOCATION, openApiSpecFileLocation);
|
||||
|
||||
useJackson = convertPropertyToBoolean(JACKSON);
|
||||
@@ -228,6 +233,13 @@ public class JavaJAXRSSpecServerCodegen extends AbstractJavaJAXRSServerCodegen {
|
||||
} else if(KUMULUZEE_LIBRARY.equals(library)) {
|
||||
supportingFiles.add(new SupportingFile("config.yaml.mustache", "src/main/resources", "config.yaml"));
|
||||
}
|
||||
|
||||
if (additionalProperties.containsKey(USE_GZIP_FEATURE)) {
|
||||
useGzipFeature = Boolean.parseBoolean(additionalProperties.get(USE_GZIP_FEATURE).toString());
|
||||
if (!useGzipFeature) {
|
||||
additionalProperties.remove(USE_GZIP_FEATURE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
39
modules/openapi-generator/src/main/resources/JavaJaxRS/spec/libraries/quarkus/api.mustache
vendored
Normal file
39
modules/openapi-generator/src/main/resources/JavaJaxRS/spec/libraries/quarkus/api.mustache
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
package {{package}};
|
||||
|
||||
{{#imports}}import {{import}};
|
||||
{{/imports}}
|
||||
|
||||
import javax.ws.rs.*;
|
||||
import javax.ws.rs.core.Response;
|
||||
|
||||
{{#useGzipFeature}}
|
||||
import org.jboss.resteasy.annotations.GZIP;
|
||||
{{/useGzipFeature}}
|
||||
|
||||
{{#useSwaggerAnnotations}}
|
||||
import io.swagger.annotations.*;
|
||||
{{/useSwaggerAnnotations}}
|
||||
{{#supportAsync}}
|
||||
import java.util.concurrent.CompletionStage;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
{{/supportAsync}}
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.Map;
|
||||
import java.util.List;
|
||||
{{#useBeanValidation}}import javax.validation.constraints.*;
|
||||
import javax.validation.Valid;{{/useBeanValidation}}
|
||||
|
||||
@Path("{{commonPath}}"){{#useSwaggerAnnotations}}
|
||||
@Api(description = "the {{{baseName}}} API"){{/useSwaggerAnnotations}}{{#hasConsumes}}
|
||||
@Consumes({ {{#consumes}}"{{{mediaType}}}"{{^-last}}, {{/-last}}{{/consumes}} }){{/hasConsumes}}{{#hasProduces}}
|
||||
@Produces({ {{#produces}}"{{{mediaType}}}"{{^-last}}, {{/-last}}{{/produces}} }){{/hasProduces}}
|
||||
{{>generatedAnnotation}}
|
||||
public {{#interfaceOnly}}interface{{/interfaceOnly}}{{^interfaceOnly}}class{{/interfaceOnly}} {{classname}} {
|
||||
{{#operations}}
|
||||
{{#operation}}
|
||||
|
||||
{{#interfaceOnly}}{{>apiInterface}}{{/interfaceOnly}}{{^interfaceOnly}}{{>apiMethod}}{{/interfaceOnly}}
|
||||
{{/operation}}
|
||||
}
|
||||
{{/operations}}
|
||||
@@ -0,0 +1,23 @@
|
||||
{{#useGzipFeature}}
|
||||
@GZIP
|
||||
{{/useGzipFeature}}
|
||||
@{{httpMethod}}{{#subresourceOperation}}
|
||||
@Path("{{{path}}}"){{/subresourceOperation}}{{#hasConsumes}}
|
||||
@Consumes({ {{#consumes}}"{{{mediaType}}}"{{^-last}}, {{/-last}}{{/consumes}} }){{/hasConsumes}}{{#hasProduces}}
|
||||
@Produces({ {{#produces}}"{{{mediaType}}}"{{^-last}}, {{/-last}}{{/produces}} }){{/hasProduces}}{{#useSwaggerAnnotations}}
|
||||
@ApiOperation(value = "{{{summary}}}", notes = "{{{notes}}}"{{#hasAuthMethods}}, authorizations = {
|
||||
{{#authMethods}}{{#isOAuth}}@Authorization(value = "{{name}}", scopes = {
|
||||
{{#scopes}}@AuthorizationScope(scope = "{{scope}}", description = "{{description}}"){{^-last}},
|
||||
{{/-last}}{{/scopes}} }){{^-last}},{{/-last}}{{/isOAuth}}
|
||||
{{^isOAuth}}@Authorization(value = "{{name}}"){{^-last}},{{/-last}}
|
||||
{{/isOAuth}}{{/authMethods}} }{{/hasAuthMethods}}, tags={ {{#vendorExtensions.x-tags}}"{{tag}}"{{^-last}}, {{/-last}}{{/vendorExtensions.x-tags}} })
|
||||
{{#implicitHeadersParams.0}}
|
||||
@io.swagger.annotations.ApiImplicitParams({
|
||||
{{#implicitHeadersParams}}
|
||||
@io.swagger.annotations.ApiImplicitParam(name = "{{{baseName}}}", value = "{{{description}}}", {{#required}}required = true,{{/required}} dataType = "{{{dataType}}}", paramType = "header"){{^-last}},{{/-last}}
|
||||
{{/implicitHeadersParams}}
|
||||
})
|
||||
{{/implicitHeadersParams.0}}
|
||||
@ApiResponses(value = { {{#responses}}
|
||||
@ApiResponse(code = {{{code}}}, message = "{{{message}}}", response = {{{baseType}}}.class{{#returnContainer}}, responseContainer = "{{{.}}}"{{/returnContainer}}){{^-last}},{{/-last}}{{/responses}} }){{/useSwaggerAnnotations}}
|
||||
{{#supportAsync}}{{>returnAsyncTypeInterface}}{{/supportAsync}}{{^supportAsync}}{{#returnResponse}}Response{{/returnResponse}}{{^returnResponse}}{{>returnTypeInterface}}{{/returnResponse}}{{/supportAsync}} {{nickname}}({{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{^-last}},{{/-last}}{{/allParams}});
|
||||
26
modules/openapi-generator/src/main/resources/JavaJaxRS/spec/libraries/quarkus/apiMethod.mustache
vendored
Normal file
26
modules/openapi-generator/src/main/resources/JavaJaxRS/spec/libraries/quarkus/apiMethod.mustache
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
{{#useGzipFeature}}
|
||||
@GZIP
|
||||
{{/useGzipFeature}}
|
||||
@{{httpMethod}}{{#subresourceOperation}}
|
||||
@Path("{{{path}}}"){{/subresourceOperation}}{{#hasConsumes}}
|
||||
@Consumes({ {{#consumes}}"{{{mediaType}}}"{{^-last}}, {{/-last}}{{/consumes}} }){{/hasConsumes}}{{#hasProduces}}
|
||||
@Produces({ {{#produces}}"{{{mediaType}}}"{{^-last}}, {{/-last}}{{/produces}} }){{/hasProduces}}{{#useSwaggerAnnotations}}
|
||||
@ApiOperation(value = "{{{summary}}}", notes = "{{{notes}}}", response = {{{returnBaseType}}}.class{{#returnContainer}}, responseContainer = "{{{.}}}"{{/returnContainer}}{{#hasAuthMethods}}, authorizations = {
|
||||
{{#authMethods}}{{#isOAuth}}@Authorization(value = "{{name}}", scopes = {
|
||||
{{#scopes}}@AuthorizationScope(scope = "{{scope}}", description = "{{description}}"){{^-last}},
|
||||
{{/-last}}{{/scopes}} }){{^-last}},{{/-last}}{{/isOAuth}}
|
||||
{{^isOAuth}}@Authorization(value = "{{name}}"){{^-last}},{{/-last}}
|
||||
{{/isOAuth}}{{/authMethods}} }{{/hasAuthMethods}}, tags={ {{#vendorExtensions.x-tags}}"{{tag}}"{{^-last}}, {{/-last}}{{/vendorExtensions.x-tags}} })
|
||||
{{#implicitHeadersParams.0}}
|
||||
@io.swagger.annotations.ApiImplicitParams({
|
||||
{{#implicitHeadersParams}}
|
||||
@io.swagger.annotations.ApiImplicitParam(name = "{{{baseName}}}", value = "{{{description}}}", {{#required}}required = true,{{/required}} dataType = "{{{dataType}}}", paramType = "header"){{^-last}},{{/-last}}
|
||||
{{/implicitHeadersParams}}
|
||||
})
|
||||
{{/implicitHeadersParams.0}}
|
||||
@ApiResponses(value = { {{#responses}}
|
||||
@ApiResponse(code = {{{code}}}, message = "{{{message}}}", response = {{{baseType}}}.class{{#containerType}}, responseContainer = "{{{.}}}"{{/containerType}}){{^-last}},{{/-last}}{{/responses}}
|
||||
}){{/useSwaggerAnnotations}}
|
||||
public {{#supportAsync}}CompletionStage<{{/supportAsync}}Response{{#supportAsync}}>{{/supportAsync}} {{nickname}}({{#allParams}}{{>queryParams}}{{>pathParams}}{{>cookieParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{^-last}},{{/-last}}{{/allParams}}) {
|
||||
return {{#supportAsync}}CompletableFuture.supplyAsync(() -> {{/supportAsync}}Response.ok().entity("magic!").build(){{#supportAsync}}){{/supportAsync}};
|
||||
}
|
||||
@@ -1,4 +1,9 @@
|
||||
# Configuration file
|
||||
# key = value
|
||||
|
||||
mp.openapi.scan.disable=true
|
||||
mp.openapi.scan.disable=true
|
||||
|
||||
{{#useGzipFeature}}
|
||||
quarkus.resteasy.gzip.enabled=true
|
||||
quarkus.resteasy.gzip.max-input=10M
|
||||
{{/useGzipFeature}}
|
||||
@@ -30,9 +30,8 @@ import java.util.stream.Collectors;
|
||||
import static org.openapitools.codegen.TestUtils.assertFileContains;
|
||||
import static org.openapitools.codegen.TestUtils.validateJavaSourceFiles;
|
||||
import static org.openapitools.codegen.languages.AbstractJavaJAXRSServerCodegen.USE_TAGS;
|
||||
import static org.openapitools.codegen.languages.JavaJAXRSSpecServerCodegen.INTERFACE_ONLY;
|
||||
import static org.openapitools.codegen.languages.JavaJAXRSSpecServerCodegen.RETURN_RESPONSE;
|
||||
import static org.openapitools.codegen.languages.JavaJAXRSSpecServerCodegen.SUPPORT_ASYNC;
|
||||
import static org.openapitools.codegen.languages.JavaJAXRSSpecServerCodegen.*;
|
||||
import static org.openapitools.codegen.languages.features.GzipFeatures.USE_GZIP_FEATURE;
|
||||
import static org.testng.Assert.assertTrue;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
@@ -725,4 +724,34 @@ public class JavaJAXRSSpecServerCodegenTest extends JavaJaxrsBaseTest {
|
||||
"\nprivate @Valid List<String> arrayThatIsNotNull = new ArrayList<>();\n");
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void generateApiForQuarkusWithGzipFeature() throws Exception {
|
||||
final File output = Files.createTempDirectory("test").toFile();
|
||||
output.deleteOnExit();
|
||||
|
||||
final OpenAPI openAPI = new OpenAPIParser()
|
||||
.readLocation("src/test/resources/3_0/ping.yaml", null, new ParseOptions()).getOpenAPI();
|
||||
|
||||
codegen.setOutputDir(output.getAbsolutePath());
|
||||
codegen.setLibrary(QUARKUS_LIBRARY);
|
||||
codegen.additionalProperties().put(USE_GZIP_FEATURE, true);
|
||||
|
||||
final ClientOptInput input = new ClientOptInput()
|
||||
.openAPI(openAPI)
|
||||
.config(codegen); //Using JavaJAXRSSpecServerCodegen
|
||||
|
||||
final DefaultGenerator generator = new DefaultGenerator();
|
||||
final List<File> files = generator.opts(input).generate(); //When generating files
|
||||
|
||||
//Then the java files are compilable
|
||||
validateJavaSourceFiles(files);
|
||||
|
||||
//And the generated class contains CompletionStage<Response>
|
||||
TestUtils.ensureContainsFile(files, output, "src/gen/java/org/openapitools/api/PingApi.java");
|
||||
assertFileContains(output.toPath().resolve("src/gen/java/org/openapitools/api/PingApi.java"),
|
||||
"\nimport org.jboss.resteasy.annotations.GZIP\n",
|
||||
"@GZIP\n"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user