diff --git a/bin/configs/other/java-vertx-web-rx.yaml b/bin/configs/other/java-vertx-web.yaml similarity index 72% rename from bin/configs/other/java-vertx-web-rx.yaml rename to bin/configs/other/java-vertx-web.yaml index 609aade555f..204f89ebf1c 100644 --- a/bin/configs/other/java-vertx-web-rx.yaml +++ b/bin/configs/other/java-vertx-web.yaml @@ -1,7 +1,7 @@ generatorName: java-vertx-web -outputDir: samples/server/petstore/java-vertx-web/rx +outputDir: samples/server/petstore/java-vertx-web inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore.yaml templateDir: modules/openapi-generator/src/main/resources/JavaVertXWebServer additionalProperties: hideGenerationTimestamp: "true" - artifactId: java-vertx-web-rx-server + artifactId: java-vertx-web-server diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaVertXWebServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaVertXWebServerCodegen.java index 4d816d14cbf..52beee8e5c3 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaVertXWebServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaVertXWebServerCodegen.java @@ -17,19 +17,14 @@ package org.openapitools.codegen.languages; import io.swagger.v3.oas.models.media.Schema; -import org.openapitools.codegen.CodegenConstants; -import org.openapitools.codegen.CodegenModel; -import org.openapitools.codegen.CodegenOperation; -import org.openapitools.codegen.CodegenProperty; -import org.openapitools.codegen.CodegenType; +import org.openapitools.codegen.*; import org.openapitools.codegen.meta.GeneratorMetadata; import org.openapitools.codegen.meta.Stability; -import org.openapitools.codegen.SupportingFile; import java.io.File; -import java.util.List; -import java.util.Locale; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; public class JavaVertXWebServerCodegen extends AbstractJavaCodegen { @@ -69,7 +64,7 @@ public class JavaVertXWebServerCodegen extends AbstractJavaCodegen { updateOption(CodegenConstants.API_PACKAGE, apiPackage); updateOption(CodegenConstants.MODEL_PACKAGE, modelPackage); updateOption(CodegenConstants.INVOKER_PACKAGE, invokerPackage); - updateOption(this.DATE_LIBRARY, this.getDateLibrary()); + updateOption(DATE_LIBRARY, this.getDateLibrary()); // Override type mapping typeMapping.put("file", "FileUpload"); @@ -99,6 +94,7 @@ public class JavaVertXWebServerCodegen extends AbstractJavaCodegen { importMapping.put("JsonProperty", "com.fasterxml.jackson.annotation.JsonProperty"); importMapping.put("JsonValue", "com.fasterxml.jackson.annotation.JsonValue"); importMapping.put("FileUpload", "io.vertx.ext.web.FileUpload"); + importMapping.put("JsonObject", "io.vertx.core.json.JsonObject"); modelDocTemplateFiles.clear(); apiDocTemplateFiles.clear(); @@ -107,10 +103,7 @@ public class JavaVertXWebServerCodegen extends AbstractJavaCodegen { supportingFiles.clear(); supportingFiles.add(new SupportingFile("supportFiles/openapi.mustache", resourceFolder, "openapi.yaml")); supportingFiles.add(new SupportingFile("supportFiles/HttpServerVerticle.mustache", sourcePackageFolder, "HttpServerVerticle.java")); - supportingFiles.add(new SupportingFile("supportFiles/MainVerticle.mustache", sourcePackageFolder, "MainVerticle.java")); supportingFiles.add(new SupportingFile("supportFiles/ApiResponse.mustache", sourcePackageFolder, "ApiResponse.java")); - supportingFiles.add(new SupportingFile("supportFiles/ApiException.mustache", sourcePackageFolder, "ApiException.java")); - supportingFiles.add(new SupportingFile("supportFiles/ParameterCast.mustache", sourcePackageFolder, "ParameterCast.java")); supportingFiles.add(new SupportingFile("supportFiles/pom.mustache", "", "pom.xml")); supportingFiles.add(new SupportingFile("README.mustache", "", "README.md") @@ -129,6 +122,7 @@ public class JavaVertXWebServerCodegen extends AbstractJavaCodegen { } } + @SuppressWarnings("unchecked") @Override public Map postProcessOperationsWithModels(Map objs, List allModels) { Map newObjs = super.postProcessOperationsWithModels(objs, allModels); @@ -141,11 +135,39 @@ public class JavaVertXWebServerCodegen extends AbstractJavaCodegen { if (operation.returnType == null) { operation.returnType = "Void"; } + if (operation.allParams.stream().anyMatch(p -> p.isFormParam && p.isFile)) { + // If there is a file upload, exclude other form params since it's not clear how the user should access to these + operation.allParams = operation + .allParams + .stream() + .filter(p -> !p.isFormParam || p.isFile) + .collect(Collectors.toList()); + } else if (operation.allParams.stream().anyMatch(p -> p.isFormParam)) { + // In Vert.x 4 Web OpenAPI the forms are handled as single json object + // We create a dummy param here and remove the other ones + CodegenParameter dummyParam = new CodegenParameter(); + dummyParam.isFormParam = true; + dummyParam.isFile = false; + dummyParam.dataType = "JsonObject"; + dummyParam.paramName = "formBody"; + operation.allParams = Stream.concat( + operation.allParams.stream().filter(p -> !p.isFormParam), + Stream.of(dummyParam) + ).collect(Collectors.toList()); + } } } return newObjs; } + @Override + public void postProcessParameter(CodegenParameter parameter) { + super.postProcessParameter(parameter); + if (parameter.isUuid || parameter.isDate || parameter.isDateTime) { + parameter.dataType = "String"; + } + } + @Override public Map postProcessSupportingFileData(Map objs) { generateYAMLSpecFile(objs); diff --git a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/README.mustache b/modules/openapi-generator/src/main/resources/JavaVertXWebServer/README.mustache index 4ed2314c893..d22d17c1bee 100644 --- a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/README.mustache +++ b/modules/openapi-generator/src/main/resources/JavaVertXWebServer/README.mustache @@ -7,8 +7,15 @@ Project generated on : {{generatedDate}} This document assumes you have maven available. To build the project using maven, run: + ```bash -mvn package && java -jar target/target/java-vertx-web-rx-server-{{artifactVersion}}-fat.jar +mvn package +``` + +To run the project, run the jar or use maven exec plugin: + +```bash +mvn exec:java ``` If all builds successfully, the server should run on [http://localhost:8080/](http://localhost:8080/) diff --git a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/api.mustache b/modules/openapi-generator/src/main/resources/JavaVertXWebServer/api.mustache index b43d443c00f..b42a02c8640 100644 --- a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/api.mustache +++ b/modules/openapi-generator/src/main/resources/JavaVertXWebServer/api.mustache @@ -5,7 +5,8 @@ package {{package}}; import {{invokerPackage}}.ApiResponse; -import io.reactivex.Single; +import io.vertx.core.Future; +import io.vertx.core.json.JsonObject; import java.util.List; import java.util.Map; @@ -13,7 +14,7 @@ import java.util.Map; public interface {{classname}} { {{#operations}} {{#operation}} - Single> {{operationId}}({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}},{{/hasMore}}{{/allParams}}); + Future> {{operationId}}({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}); {{/operation}} {{/operations}} } diff --git a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/apiHandler.mustache b/modules/openapi-generator/src/main/resources/JavaVertXWebServer/apiHandler.mustache index 26a64d231a5..bbd6274862a 100644 --- a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/apiHandler.mustache +++ b/modules/openapi-generator/src/main/resources/JavaVertXWebServer/apiHandler.mustache @@ -3,66 +3,61 @@ package {{package}}; {{#imports}}import {{import}}; {{/imports}} -import {{invokerPackage}}.ParameterCast; -import {{invokerPackage}}.ApiException; - import com.fasterxml.jackson.core.type.TypeReference; -import io.vertx.core.json.Json; -import io.vertx.core.Handler; -import io.vertx.core.http.HttpServerResponse; +import io.vertx.core.json.jackson.DatabindCodec; +import io.vertx.ext.web.openapi.RouterFactory; +import io.vertx.ext.web.validation.RequestParameters; +import io.vertx.ext.web.validation.RequestParameter; +import io.vertx.ext.web.validation.ValidationHandler; import io.vertx.ext.web.RoutingContext; +import io.vertx.core.json.JsonObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import io.reactivex.Single; - import java.util.List; import java.util.Map; public class {{classname}}Handler { private static final Logger logger = LoggerFactory.getLogger({{classname}}Handler.class); - private {{classname}} apiImpl = new {{classname}}Impl(); - public {{classname}}Handler(Map> operationHandlers) { + private final {{classname}} apiImpl; + + public {{classname}}Handler() { + this.apiImpl = new {{classname}}Impl(); + } + + public void mount(RouterFactory factory) { {{#operations}} {{#operation}} - operationHandlers.put("{{operationId}}", this::{{operationId}}); + factory.operation("{{operationId}}").handler(this::{{operationId}}); {{/operation}} {{/operations}} } + {{#operations}} {{#operation}} - private void {{operationId}}(RoutingContext routingContext) { logger.info("{{operationId}}()"); - HttpServerResponse response = routingContext.response(); - {{#returnType}}Single{{/returnType}}{{^returnType}}Completable{{/returnType}}.defer( () -> { -{{#allParams}}{{^isBodyParam}}{{>headerParams}}{{>pathParams}}{{>queryParams}}{{>formParams}}{{/isBodyParam}}{{/allParams}} + // Param extraction + RequestParameters requestParameters = routingContext.get(ValidationHandler.REQUEST_CONTEXT_KEY); + +{{#allParams}}{{>headerParams}}{{>pathParams}}{{>queryParams}}{{>formParams}}{{>bodyParams}}{{/allParams}} {{#allParams}} -{{#isBodyParam}} - String jsonString = routingContext.getBodyAsString(); - {{{dataType}}} {{paramName}} = jsonString == null ? null : Json.decodeValue(jsonString, new TypeReference<{{{dataType}}}>(){}); -{{/isBodyParam}} + logger.debug("Parameter {{paramName}} is {}", {{paramName}}); {{/allParams}} -{{#allParams}} - logger.info("Parameter {{paramName}} is {}", {{paramName}}); -{{/allParams}} - return apiImpl.{{operationId}}({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}); - }) - .subscribe( - apiResponse -> { - response.setStatusCode(apiResponse.getStatusCode()) - .end(Json.encodePrettily(apiResponse.getData())); - }, error -> { - if (error instanceof ApiException) { - ApiException apiException = (ApiException) error; - response.setStatusCode(apiException.getStatusCode()).end(apiException.getMessage()); + + apiImpl.{{operationId}}({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) + .onSuccess(apiResponse -> { + routingContext.response().setStatusCode(apiResponse.getStatusCode()); + if (apiResponse.hasData()) { + routingContext.json(apiResponse.getData()); } else { - response.setStatusCode(500).end(error.getMessage()); + routingContext.response().end(); } - }).dispose(); + }) + .onFailure(routingContext::fail); } {{/operation}} diff --git a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/apiImpl.mustache b/modules/openapi-generator/src/main/resources/JavaVertXWebServer/apiImpl.mustache index 86f61eb0f6c..4d15c98722f 100644 --- a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/apiImpl.mustache +++ b/modules/openapi-generator/src/main/resources/JavaVertXWebServer/apiImpl.mustache @@ -4,9 +4,10 @@ package {{package}}; {{/imports}} import {{invokerPackage}}.ApiResponse; -import {{invokerPackage}}.ApiException; -import io.reactivex.Single; +import io.vertx.core.Future; +import io.vertx.core.json.JsonObject; +import io.vertx.ext.web.handler.impl.HttpStatusException; import java.util.List; import java.util.Map; @@ -16,8 +17,8 @@ import java.util.Map; public class {{classname}}Impl implements {{classname}} { {{#operations}} {{#operation}} - public Single> {{operationId}}({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}},{{/hasMore}}{{/allParams}}) { - return Single.error(new ApiException("Not Implemented").setStatusCode(501)); + public Future> {{operationId}}({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) { + return Future.failedFuture(new HttpStatusException(501)); } {{/operation}} diff --git a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/bodyParams.mustache b/modules/openapi-generator/src/main/resources/JavaVertXWebServer/bodyParams.mustache new file mode 100644 index 00000000000..aa8ed5e08e4 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/JavaVertXWebServer/bodyParams.mustache @@ -0,0 +1,4 @@ +{{#isBodyParam}} + RequestParameter body = requestParameters.body(); + {{{dataType}}} {{paramName}} = body != null ? DatabindCodec.mapper().convertValue(body.get(), new TypeReference<{{{dataType}}}>(){}) : null; +{{/isBodyParam}} diff --git a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/formParams.mustache b/modules/openapi-generator/src/main/resources/JavaVertXWebServer/formParams.mustache index 0e5c83e603c..de70de4226d 100644 --- a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/formParams.mustache +++ b/modules/openapi-generator/src/main/resources/JavaVertXWebServer/formParams.mustache @@ -1,18 +1,9 @@ {{#isFormParam}} -{{^isListContainer}} {{^isFile}} -{{#isModel}} - {{{dataType}}} {{paramName}} = ParameterCast.toObject(routingContext.request().getFormAttribute("{{baseName}}"), {{dataType}}.class); -{{/isModel}} -{{^isModel}} - {{{dataType}}} {{paramName}} = ParameterCast.to{{dataType}}(routingContext.request().getFormAttribute("{{baseName}}")); -{{/isModel}} + RequestParameter body = requestParameters.body(); + JsonObject {{paramName}} = body != null ? body.getJsonObject() : null; {{/isFile}} {{#isFile}} - {{{dataType}}} {{paramName}} = routingContext.fileUploads().iterator().next(); + {{{dataType}}} {{paramName}} = routingContext.fileUploads().iterator().next(); {{/isFile}} -{{/isListContainer}} -{{#isListContainer}} - {{{dataType}}} {{paramName}} = routingContext.request().params().getAll("{{baseName}}"); -{{/isListContainer}} -{{/isFormParam}} \ No newline at end of file +{{/isFormParam}} diff --git a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/headerParams.mustache b/modules/openapi-generator/src/main/resources/JavaVertXWebServer/headerParams.mustache index 38199231542..3980b77c9b1 100644 --- a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/headerParams.mustache +++ b/modules/openapi-generator/src/main/resources/JavaVertXWebServer/headerParams.mustache @@ -1,13 +1,13 @@ {{#isHeaderParam}} {{^isListContainer}} {{#isModel}} - {{{dataType}}} {{paramName}} = ParameterCast.toObject(routingContext.request().getHeader("{{baseName}}"), {{dataType}}.class); + {{{dataType}}} {{paramName}} = requestParameters.headerParameter("{{baseName}}") != null ? DatabindCodec.mapper().convertValue(requestParameters.headerParameter("{{baseName}}").get(), new TypeReference<{{{dataType}}}>(){}) : null; {{/isModel}} {{^isModel}} - {{{dataType}}} {{paramName}} = ParameterCast.to{{dataType}}(routingContext.request().getHeader("{{baseName}}")); + {{{dataType}}} {{paramName}} = requestParameters.headerParameter("{{baseName}}") != null ? requestParameters.headerParameter("{{baseName}}").get{{dataType}}() : null; {{/isModel}} {{/isListContainer}} {{#isListContainer}} - {{{dataType}}} {{paramName}} = routingContext.request().params().getAll("{{baseName}}"); + {{{dataType}}} {{paramName}} = requestParameters.headerParameter("{{baseName}}") != null ? DatabindCodec.mapper().convertValue(requestParameters.headerParameter("{{baseName}}").get(), new TypeReference<{{{dataType}}}>(){}) : null; {{/isListContainer}} -{{/isHeaderParam}} \ No newline at end of file +{{/isHeaderParam}} diff --git a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/pathParams.mustache b/modules/openapi-generator/src/main/resources/JavaVertXWebServer/pathParams.mustache index 7c62bcefc56..4022a342721 100644 --- a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/pathParams.mustache +++ b/modules/openapi-generator/src/main/resources/JavaVertXWebServer/pathParams.mustache @@ -1,13 +1,13 @@ {{#isPathParam}} {{^isListContainer}} {{#isModel}} - {{{dataType}}} {{paramName}} = ParameterCast.toObject(routingContext.pathParams().get("{{baseName}}"), {{dataType}}.class); + {{{dataType}}} {{paramName}} = requestParameters.pathParameter("{{baseName}}") != null ? DatabindCodec.mapper().convertValue(requestParameters.pathParameter("{{baseName}}").get(), new TypeReference<{{{dataType}}}>(){}) : null; {{/isModel}} {{^isModel}} - {{{dataType}}} {{paramName}} = ParameterCast.to{{dataType}}(routingContext.pathParams().get("{{baseName}}")); + {{{dataType}}} {{paramName}} = requestParameters.pathParameter("{{baseName}}") != null ? requestParameters.pathParameter("{{baseName}}").get{{dataType}}() : null; {{/isModel}} {{/isListContainer}} {{#isListContainer}} - {{{dataType}}} {{paramName}} = routingContext.request().params().getAll("{{baseName}}"); + {{{dataType}}} {{paramName}} = requestParameters.pathParameter("{{baseName}}") != null ? DatabindCodec.mapper().convertValue(requestParameters.pathParameter("{{baseName}}").get(), new TypeReference<{{{dataType}}}>(){}) : null; {{/isListContainer}} -{{/isPathParam}} \ No newline at end of file +{{/isPathParam}} diff --git a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/queryParams.mustache b/modules/openapi-generator/src/main/resources/JavaVertXWebServer/queryParams.mustache index efb6b55008d..1badafce1b6 100644 --- a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/queryParams.mustache +++ b/modules/openapi-generator/src/main/resources/JavaVertXWebServer/queryParams.mustache @@ -1,13 +1,13 @@ {{#isQueryParam}} {{^isListContainer}} {{#isModel}} - {{{dataType}}} {{paramName}} = ParameterCast.toObject(routingContext.queryParams().get("{{baseName}}"), {{dataType}}.class); + {{{dataType}}} {{paramName}} = requestParameters.queryParameter("{{baseName}}") != null ? DatabindCodec.mapper().convertValue(requestParameters.queryParameter("{{baseName}}").get(), new TypeReference<{{{dataType}}}>(){}) : null; {{/isModel}} {{^isModel}} - {{{dataType}}} {{paramName}} = ParameterCast.to{{dataType}}(routingContext.queryParams().get("{{baseName}}")); + {{{dataType}}} {{paramName}} = requestParameters.queryParameter("{{baseName}}") != null ? requestParameters.queryParameter("{{baseName}}").get{{dataType}}() : null; {{/isModel}} {{/isListContainer}} {{#isListContainer}} - {{{dataType}}} {{paramName}} = routingContext.request().params().getAll("{{baseName}}"); + {{{dataType}}} {{paramName}} = requestParameters.queryParameter("{{baseName}}") != null ? DatabindCodec.mapper().convertValue(requestParameters.queryParameter("{{baseName}}").get(), new TypeReference<{{{dataType}}}>(){}) : null; {{/isListContainer}} -{{/isQueryParam}} \ No newline at end of file +{{/isQueryParam}} diff --git a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/supportFiles/ApiException.mustache b/modules/openapi-generator/src/main/resources/JavaVertXWebServer/supportFiles/ApiException.mustache deleted file mode 100644 index 4262b43dacf..00000000000 --- a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/supportFiles/ApiException.mustache +++ /dev/null @@ -1,24 +0,0 @@ -package {{invokerPackage}}; - -public class ApiException extends RuntimeException { - private final String message; - private Integer statusCode; - - public ApiException(String message) { - this.message = message; - } - - @Override - public String getMessage() { - return message; - } - - public ApiException setStatusCode(Integer statusCode) { - this.statusCode = statusCode; - return this; - } - - public Integer getStatusCode() { - return statusCode; - } -} diff --git a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/supportFiles/ApiResponse.mustache b/modules/openapi-generator/src/main/resources/JavaVertXWebServer/supportFiles/ApiResponse.mustache index 03d1392de10..f1a435bdcc8 100644 --- a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/supportFiles/ApiResponse.mustache +++ b/modules/openapi-generator/src/main/resources/JavaVertXWebServer/supportFiles/ApiResponse.mustache @@ -2,28 +2,36 @@ package {{invokerPackage}}; public class ApiResponse { private final T data; - private Integer statusCode; + private final int statusCode; + + public ApiResponse() { + this(200, null); + } public ApiResponse(T data) { + this(200, data); + } + + public ApiResponse(int statusCode) { + this(statusCode, null); + } + + public ApiResponse(int statusCode, T data) { + this.statusCode = statusCode; this.data = data; } - public ApiResponse() { - this.data = null; + public boolean hasData() { + return data != null; } public T getData() { return data; } - public ApiResponse setStatusCode(Integer statusCode) { - this.statusCode = statusCode; - return this; - } - - public Integer getStatusCode() { + public int getStatusCode() { return statusCode; } } - + diff --git a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/supportFiles/HttpServerVerticle.mustache b/modules/openapi-generator/src/main/resources/JavaVertXWebServer/supportFiles/HttpServerVerticle.mustache index e155157f840..51de8394f1a 100644 --- a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/supportFiles/HttpServerVerticle.mustache +++ b/modules/openapi-generator/src/main/resources/JavaVertXWebServer/supportFiles/HttpServerVerticle.mustache @@ -1,66 +1,54 @@ package {{invokerPackage}}; -import io.vertx.core.Future; -import io.vertx.core.Handler; +import io.vertx.core.AbstractVerticle; +import io.vertx.core.Promise; import io.vertx.core.http.HttpServerOptions; +import io.vertx.ext.web.Router; import io.vertx.ext.web.RoutingContext; -import io.vertx.ext.web.api.contract.RouterFactoryOptions; -import io.vertx.reactivex.core.AbstractVerticle; -import io.vertx.reactivex.ext.web.api.contract.openapi3.OpenAPI3RouterFactory; +import io.vertx.ext.web.openapi.RouterFactory; +import io.vertx.ext.web.openapi.RouterFactoryOptions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - -import java.util.HashMap; -import java.util.Map; {{#apiInfo}}{{#apis}} import {{apiPackage}}.{{classname}}Handler;{{/apis}}{{/apiInfo}} public class HttpServerVerticle extends AbstractVerticle { - + private static final Logger logger = LoggerFactory.getLogger(HttpServerVerticle.class); + private static final String specFile = "src/main/resources/openapi.yaml"; - private static String specFile = "src/main/resources/openapi.yaml"; - - private Map> operationHandlers = new HashMap<>(); + {{#apiInfo}}{{#apis}} + private final {{classname}}Handler {{classVarName}}Handler = new {{classname}}Handler();{{/apis}}{{/apiInfo}} @Override - public void start(Future fut) { - {{#apiInfo}}{{#apis}} - new {{classname}}Handler(operationHandlers);{{/apis}}{{/apiInfo}} + public void start(Promise startPromise) { + RouterFactory.create(vertx, specFile) + .map(factory -> { + factory.setOptions(new RouterFactoryOptions() + // For production use case, you need to enable this flag and provide the proper security handler + .setRequireSecurityHandlers(false) + ); + {{#apiInfo}}{{#apis}} + {{classVarName}}Handler.mount(factory);{{/apis}}{{/apiInfo}} - OpenAPI3RouterFactory.rxCreate(vertx, specFile) - .doOnSuccess(factory -> { - factory.setOptions(new RouterFactoryOptions() - .setRequireSecurityHandlers(false) - .setMountNotImplementedHandler(false)); - factory.setValidationFailureHandler(this::validationFailureHandler); - operationHandlers.forEach(factory.getDelegate()::addHandlerByOperationId); - }) - .map(OpenAPI3RouterFactory::getRouter) - .doOnSuccess(router -> router.route().last().handler(this::methodNotFoundHandler)) - .map(router -> - vertx.createHttpServer(new HttpServerOptions() - .setPort(8080) - .setHost("localhost")) - .requestHandler(router) - .listen() - ) - .subscribe( httpServer -> { - logger.info("Http verticle deployed successful"); - fut.complete(); - }, error -> { - logger.info("Http verticle failed to deployed", error); - fut.fail(error.getCause()); - }); + Router router = factory.createRouter(); + router.errorHandler(400, this::validationFailureHandler); + + return router; + }) + .compose(router -> + vertx.createHttpServer() + .requestHandler(router) + .listen(8080) + ) + .onSuccess(server -> logger.info("Http verticle deploy successful")) + .onFailure(t -> logger.error("Http verticle failed to deploy", t)) + // Complete the start promise + .mapEmpty().onComplete(startPromise); } - private void validationFailureHandler(io.vertx.reactivex.ext.web.RoutingContext rc) { + private void validationFailureHandler(RoutingContext rc) { rc.response().setStatusCode(400) .end("Bad Request : " + rc.failure().getMessage()); } - - private void methodNotFoundHandler(io.vertx.reactivex.ext.web.RoutingContext rc) { - rc.response().setStatusCode(404) - .end("Method '" + rc.request().path() + "' Not Found"); - } } diff --git a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/supportFiles/MainVerticle.mustache b/modules/openapi-generator/src/main/resources/JavaVertXWebServer/supportFiles/MainVerticle.mustache deleted file mode 100644 index fd93c46ad92..00000000000 --- a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/supportFiles/MainVerticle.mustache +++ /dev/null @@ -1,27 +0,0 @@ -package {{invokerPackage}}; - -import io.vertx.core.DeploymentOptions; -import io.vertx.core.Future; -import io.vertx.reactivex.core.AbstractVerticle; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class MainVerticle extends AbstractVerticle { - - private static final Logger logger = LoggerFactory.getLogger(MainVerticle.class); - - @Override - public void start(Future future) { - - DeploymentOptions options = new DeploymentOptions(); - options.setInstances(Runtime.getRuntime().availableProcessors()); - - vertx.deployVerticle(HttpServerVerticle.class.getName(), options, res -> { - if (!res.succeeded()) { - logger.error("Deployment fail reason: ", res.cause()); - } - }); - } -} - - diff --git a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/supportFiles/ParameterCast.mustache b/modules/openapi-generator/src/main/resources/JavaVertXWebServer/supportFiles/ParameterCast.mustache deleted file mode 100644 index ba274ac31be..00000000000 --- a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/supportFiles/ParameterCast.mustache +++ /dev/null @@ -1,88 +0,0 @@ -package {{invokerPackage}}; - -import com.fasterxml.jackson.core.type.TypeReference; -import io.vertx.core.json.Json; - -import java.util.UUID; -import java.time.OffsetDateTime; -import java.time.format.DateTimeFormatter; - -public class ParameterCast { - - public static Boolean toBoolean(String str) { - if (str != null) { - return Boolean.parseBoolean(str); - } else { - return null; - } - } - - public static UUID toUUID(String str) { - if (str != null) { - return UUID.fromString(str); - } else { - return null; - } - } - - public static Integer toInteger(String str) { - if (str != null) { - return Integer.parseInt(str); - } else { - return null; - } - } - - public static Long toLong(String str) { - if (str != null) { - return Long.parseLong(str); - } else { - return null; - } - } - - public static Double toDouble(String str) { - if (str != null){ - return Double.parseDouble(str); - } else { - return null; - } - } - - public static Float toFloat(String str) { - if (str != null){ - return Float.parseFloat(str); - } else { - return null; - } - } - - public static OffsetDateTime toOffsetDateTime(String str) { - if (str != null) { - return OffsetDateTime.parse(str, - DateTimeFormatter.ISO_OFFSET_DATE_TIME); - } else { - return null; - } - } - - public static String toString(String str) { - return str; - } - - public static T toObject(String str) { - if (str != null) { - return Json.decodeValue(str, new TypeReference(){}); - } else { - return null; - } - } - - public static T toObject(String str, Class classz) { - if (str != null) { - return Json.decodeValue(str, classz); - } else { - return null; - } - } -} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/supportFiles/pom.mustache b/modules/openapi-generator/src/main/resources/JavaVertXWebServer/supportFiles/pom.mustache index 458ee2b4dd7..6f3497cd231 100644 --- a/modules/openapi-generator/src/main/resources/JavaVertXWebServer/supportFiles/pom.mustache +++ b/modules/openapi-generator/src/main/resources/JavaVertXWebServer/supportFiles/pom.mustache @@ -1,62 +1,77 @@ 4.0.0 - + {{groupId}} {{artifactId}} {{artifactVersion}} jar - - {{appName}} - + + {{appName}} + - 3.6.3 - 1.7.26 - 4.13 + UTF-8 + + 3.8.1 + 2.4.3 + 2.22.2 + 1.5.0 + + 4.0.0.Beta3 + 5.6.2 + 1.7.30 + 2.11.2 + + {{invokerPackage}}.HttpServerVerticle + + + + + io.vertx + vertx-stack-depchain + ${vertx.version} + pom + import + + + + + + io.vertx + vertx-core + + + io.vertx + vertx-web + + + io.vertx + vertx-web-openapi + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + org.slf4j slf4j-simple ${slf4j.version} - - io.vertx - vertx-core - ${vertx.version} - - - io.vertx - vertx-web - ${vertx.version} - - - io.vertx - vertx-web-api-contract - ${vertx.version} - - - io.vertx - vertx-rx-java2 - ${vertx.version} - - - io.reactivex.rxjava2 - rxjava - 2.2.0 - + - junit - junit - ${junit.version} + io.vertx + vertx-junit5 test - io.vertx - vertx-unit - ${vertx.version} + org.junit.jupiter + junit-jupiter + ${junit-jupiter.version} test @@ -65,16 +80,15 @@ maven-compiler-plugin - 3.3 + ${maven-compiler-plugin.version} 1.8 1.8 - org.apache.maven.plugins maven-shade-plugin - 2.3 + ${maven-shade-plugin.version} package @@ -84,19 +98,41 @@ + implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> - io.vertx.core.Starter - {{invokerPackage}}.MainVerticle + io.vertx.core.Launcher + ${main.verticle} + + META-INF/services/io.vertx.core.spi.VerticleFactory + - - ${project.build.directory}/${project.artifactId}-${project.version}-fat.jar + + + ${project.build.directory}/${project.artifactId}-${project.version}-fat.jar + + + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + org.codehaus.mojo + exec-maven-plugin + ${exec-maven-plugin.version} + + io.vertx.core.Launcher + + run + ${main.verticle} + + + - \ No newline at end of file + diff --git a/pom.xml b/pom.xml index bb1982f6512..fb86667b54e 100644 --- a/pom.xml +++ b/pom.xml @@ -1291,7 +1291,7 @@ samples/server/petstore/scala-play-server samples/server/petstore/scala-akka-http-server samples/server/petstore/scalatra - samples/server/petstore/java-vertx-web/rx + samples/server/petstore/java-vertx-web samples/server/petstore/scala-finch samples/server/petstore/kotlin-springboot diff --git a/samples/server/petstore/java-vertx-web/rx/.openapi-generator-ignore b/samples/server/petstore/java-vertx-web/.openapi-generator-ignore similarity index 100% rename from samples/server/petstore/java-vertx-web/rx/.openapi-generator-ignore rename to samples/server/petstore/java-vertx-web/.openapi-generator-ignore diff --git a/samples/server/petstore/java-vertx-web/rx/.openapi-generator/FILES b/samples/server/petstore/java-vertx-web/.openapi-generator/FILES similarity index 87% rename from samples/server/petstore/java-vertx-web/rx/.openapi-generator/FILES rename to samples/server/petstore/java-vertx-web/.openapi-generator/FILES index 50ed7df1bb4..4169de32e26 100644 --- a/samples/server/petstore/java-vertx-web/rx/.openapi-generator/FILES +++ b/samples/server/petstore/java-vertx-web/.openapi-generator/FILES @@ -1,10 +1,7 @@ README.md pom.xml -src/main/java/org/openapitools/vertxweb/server/ApiException.java src/main/java/org/openapitools/vertxweb/server/ApiResponse.java src/main/java/org/openapitools/vertxweb/server/HttpServerVerticle.java -src/main/java/org/openapitools/vertxweb/server/MainVerticle.java -src/main/java/org/openapitools/vertxweb/server/ParameterCast.java src/main/java/org/openapitools/vertxweb/server/api/PetApi.java src/main/java/org/openapitools/vertxweb/server/api/PetApiHandler.java src/main/java/org/openapitools/vertxweb/server/api/PetApiImpl.java diff --git a/samples/server/petstore/java-vertx-web/rx/.openapi-generator/VERSION b/samples/server/petstore/java-vertx-web/.openapi-generator/VERSION similarity index 100% rename from samples/server/petstore/java-vertx-web/rx/.openapi-generator/VERSION rename to samples/server/petstore/java-vertx-web/.openapi-generator/VERSION diff --git a/samples/server/petstore/java-vertx-web/rx/README.md b/samples/server/petstore/java-vertx-web/README.md similarity index 69% rename from samples/server/petstore/java-vertx-web/rx/README.md rename to samples/server/petstore/java-vertx-web/README.md index 9bb8dfd4a23..f4c896479f5 100644 --- a/samples/server/petstore/java-vertx-web/rx/README.md +++ b/samples/server/petstore/java-vertx-web/README.md @@ -4,8 +4,15 @@ This document assumes you have maven available. To build the project using maven, run: + ```bash -mvn package && java -jar target/target/java-vertx-web-rx-server-1.0.0-SNAPSHOT-fat.jar +mvn package +``` + +To run the project, run the jar or use maven exec plugin: + +```bash +mvn exec:java ``` If all builds successfully, the server should run on [http://localhost:8080/](http://localhost:8080/) diff --git a/samples/server/petstore/java-vertx-web/pom.xml b/samples/server/petstore/java-vertx-web/pom.xml new file mode 100644 index 00000000000..e813663f8d1 --- /dev/null +++ b/samples/server/petstore/java-vertx-web/pom.xml @@ -0,0 +1,138 @@ + + 4.0.0 + + org.openapitools + java-vertx-web-server + 1.0.0-SNAPSHOT + jar + + OpenAPI Petstore + + + UTF-8 + + 3.8.1 + 2.4.3 + 2.22.2 + 1.5.0 + + 4.0.0.Beta3 + 5.6.2 + 1.7.30 + 2.11.2 + + org.openapitools.vertxweb.server.HttpServerVerticle + + + + + + + io.vertx + vertx-stack-depchain + ${vertx.version} + pom + import + + + + + + + io.vertx + vertx-core + + + io.vertx + vertx-web + + + io.vertx + vertx-web-openapi + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + org.slf4j + slf4j-simple + ${slf4j.version} + + + + + io.vertx + vertx-junit5 + test + + + org.junit.jupiter + junit-jupiter + ${junit-jupiter.version} + test + + + + + + + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + + + maven-shade-plugin + ${maven-shade-plugin.version} + + + package + + shade + + + + + + io.vertx.core.Launcher + ${main.verticle} + + + + META-INF/services/io.vertx.core.spi.VerticleFactory + + + + + ${project.build.directory}/${project.artifactId}-${project.version}-fat.jar + + + + + + + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + org.codehaus.mojo + exec-maven-plugin + ${exec-maven-plugin.version} + + io.vertx.core.Launcher + + run + ${main.verticle} + + + + + + diff --git a/samples/server/petstore/java-vertx-web/rx/pom.xml b/samples/server/petstore/java-vertx-web/rx/pom.xml deleted file mode 100644 index 5ffdf42caf3..00000000000 --- a/samples/server/petstore/java-vertx-web/rx/pom.xml +++ /dev/null @@ -1,102 +0,0 @@ - - 4.0.0 - - org.openapitools - java-vertx-web-rx-server - 1.0.0-SNAPSHOT - jar - - OpenAPI Petstore - - - 3.6.3 - 1.7.26 - 4.13 - - - - - org.slf4j - slf4j-simple - ${slf4j.version} - - - io.vertx - vertx-core - ${vertx.version} - - - io.vertx - vertx-web - ${vertx.version} - - - io.vertx - vertx-web-api-contract - ${vertx.version} - - - io.vertx - vertx-rx-java2 - ${vertx.version} - - - io.reactivex.rxjava2 - rxjava - 2.2.0 - - - - junit - junit - ${junit.version} - test - - - io.vertx - vertx-unit - ${vertx.version} - test - - - - - - - maven-compiler-plugin - 3.3 - - 1.8 - 1.8 - - - - org.apache.maven.plugins - maven-shade-plugin - 2.3 - - - package - - shade - - - - - - io.vertx.core.Starter - org.openapitools.vertxweb.server.MainVerticle - - - - - ${project.build.directory}/${project.artifactId}-${project.version}-fat.jar - - - - - - - \ No newline at end of file diff --git a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/ApiException.java b/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/ApiException.java deleted file mode 100644 index e8f774793af..00000000000 --- a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/ApiException.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.openapitools.vertxweb.server; - -public class ApiException extends RuntimeException { - private final String message; - private Integer statusCode; - - public ApiException(String message) { - this.message = message; - } - - @Override - public String getMessage() { - return message; - } - - public ApiException setStatusCode(Integer statusCode) { - this.statusCode = statusCode; - return this; - } - - public Integer getStatusCode() { - return statusCode; - } -} diff --git a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/HttpServerVerticle.java b/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/HttpServerVerticle.java deleted file mode 100644 index 796bd14855a..00000000000 --- a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/HttpServerVerticle.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.openapitools.vertxweb.server; - -import io.vertx.core.Future; -import io.vertx.core.Handler; -import io.vertx.core.http.HttpServerOptions; -import io.vertx.ext.web.RoutingContext; -import io.vertx.ext.web.api.contract.RouterFactoryOptions; -import io.vertx.reactivex.core.AbstractVerticle; -import io.vertx.reactivex.ext.web.api.contract.openapi3.OpenAPI3RouterFactory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.HashMap; -import java.util.Map; - -import org.openapitools.vertxweb.server.api.PetApiHandler; -import org.openapitools.vertxweb.server.api.StoreApiHandler; -import org.openapitools.vertxweb.server.api.UserApiHandler; - -public class HttpServerVerticle extends AbstractVerticle { - - private static final Logger logger = LoggerFactory.getLogger(HttpServerVerticle.class); - - private static String specFile = "src/main/resources/openapi.yaml"; - - private Map> operationHandlers = new HashMap<>(); - - @Override - public void start(Future fut) { - - new PetApiHandler(operationHandlers); - new StoreApiHandler(operationHandlers); - new UserApiHandler(operationHandlers); - - OpenAPI3RouterFactory.rxCreate(vertx, specFile) - .doOnSuccess(factory -> { - factory.setOptions(new RouterFactoryOptions() - .setRequireSecurityHandlers(false) - .setMountNotImplementedHandler(false)); - factory.setValidationFailureHandler(this::validationFailureHandler); - operationHandlers.forEach(factory.getDelegate()::addHandlerByOperationId); - }) - .map(OpenAPI3RouterFactory::getRouter) - .doOnSuccess(router -> router.route().last().handler(this::methodNotFoundHandler)) - .map(router -> - vertx.createHttpServer(new HttpServerOptions() - .setPort(8080) - .setHost("localhost")) - .requestHandler(router) - .listen() - ) - .subscribe( httpServer -> { - logger.info("Http verticle deployed successful"); - fut.complete(); - }, error -> { - logger.info("Http verticle failed to deployed", error); - fut.fail(error.getCause()); - }); - } - - private void validationFailureHandler(io.vertx.reactivex.ext.web.RoutingContext rc) { - rc.response().setStatusCode(400) - .end("Bad Request : " + rc.failure().getMessage()); - } - - private void methodNotFoundHandler(io.vertx.reactivex.ext.web.RoutingContext rc) { - rc.response().setStatusCode(404) - .end("Method '" + rc.request().path() + "' Not Found"); - } -} diff --git a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/MainVerticle.java b/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/MainVerticle.java deleted file mode 100644 index b2aa995e38e..00000000000 --- a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/MainVerticle.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.openapitools.vertxweb.server; - -import io.vertx.core.DeploymentOptions; -import io.vertx.core.Future; -import io.vertx.reactivex.core.AbstractVerticle; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class MainVerticle extends AbstractVerticle { - - private static final Logger logger = LoggerFactory.getLogger(MainVerticle.class); - - @Override - public void start(Future future) { - - DeploymentOptions options = new DeploymentOptions(); - options.setInstances(Runtime.getRuntime().availableProcessors()); - - vertx.deployVerticle(HttpServerVerticle.class.getName(), options, res -> { - if (!res.succeeded()) { - logger.error("Deployment fail reason: ", res.cause()); - } - }); - } -} - - diff --git a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/ParameterCast.java b/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/ParameterCast.java deleted file mode 100644 index 471678d32f9..00000000000 --- a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/ParameterCast.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.openapitools.vertxweb.server; - -import com.fasterxml.jackson.core.type.TypeReference; -import io.vertx.core.json.Json; - -import java.util.UUID; -import java.time.OffsetDateTime; -import java.time.format.DateTimeFormatter; - -public class ParameterCast { - - public static Boolean toBoolean(String str) { - if (str != null) { - return Boolean.parseBoolean(str); - } else { - return null; - } - } - - public static UUID toUUID(String str) { - if (str != null) { - return UUID.fromString(str); - } else { - return null; - } - } - - public static Integer toInteger(String str) { - if (str != null) { - return Integer.parseInt(str); - } else { - return null; - } - } - - public static Long toLong(String str) { - if (str != null) { - return Long.parseLong(str); - } else { - return null; - } - } - - public static Double toDouble(String str) { - if (str != null){ - return Double.parseDouble(str); - } else { - return null; - } - } - - public static Float toFloat(String str) { - if (str != null){ - return Float.parseFloat(str); - } else { - return null; - } - } - - public static OffsetDateTime toOffsetDateTime(String str) { - if (str != null) { - return OffsetDateTime.parse(str, - DateTimeFormatter.ISO_OFFSET_DATE_TIME); - } else { - return null; - } - } - - public static String toString(String str) { - return str; - } - - public static T toObject(String str) { - if (str != null) { - return Json.decodeValue(str, new TypeReference(){}); - } else { - return null; - } - } - - public static T toObject(String str, Class classz) { - if (str != null) { - return Json.decodeValue(str, classz); - } else { - return null; - } - } -} \ No newline at end of file diff --git a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/api/PetApi.java b/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/api/PetApi.java deleted file mode 100644 index a54ab62fe11..00000000000 --- a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/api/PetApi.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.openapitools.vertxweb.server.api; - -import io.vertx.ext.web.FileUpload; -import org.openapitools.vertxweb.server.model.ModelApiResponse; -import org.openapitools.vertxweb.server.model.Pet; - -import org.openapitools.vertxweb.server.ApiResponse; - -import io.reactivex.Single; - -import java.util.List; -import java.util.Map; - -public interface PetApi { - Single> addPet(Pet pet); - Single> deletePet(Long petId,String apiKey); - Single>> findPetsByStatus(List status); - Single>> findPetsByTags(List tags); - Single> getPetById(Long petId); - Single> updatePet(Pet pet); - Single> updatePetWithForm(Long petId,String name,String status); - Single> uploadFile(Long petId,String additionalMetadata,FileUpload file); -} diff --git a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/api/PetApiHandler.java b/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/api/PetApiHandler.java deleted file mode 100644 index 62cbd7774bb..00000000000 --- a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/api/PetApiHandler.java +++ /dev/null @@ -1,250 +0,0 @@ -package org.openapitools.vertxweb.server.api; - -import io.vertx.ext.web.FileUpload; -import org.openapitools.vertxweb.server.model.ModelApiResponse; -import org.openapitools.vertxweb.server.model.Pet; - -import org.openapitools.vertxweb.server.ParameterCast; -import org.openapitools.vertxweb.server.ApiException; - -import com.fasterxml.jackson.core.type.TypeReference; -import io.vertx.core.json.Json; -import io.vertx.core.Handler; -import io.vertx.core.http.HttpServerResponse; -import io.vertx.ext.web.RoutingContext; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import io.reactivex.Single; - -import java.util.List; -import java.util.Map; - -public class PetApiHandler { - - private static final Logger logger = LoggerFactory.getLogger(PetApiHandler.class); - private PetApi apiImpl = new PetApiImpl(); - - public PetApiHandler(Map> operationHandlers) { - operationHandlers.put("addPet", this::addPet); - operationHandlers.put("deletePet", this::deletePet); - operationHandlers.put("findPetsByStatus", this::findPetsByStatus); - operationHandlers.put("findPetsByTags", this::findPetsByTags); - operationHandlers.put("getPetById", this::getPetById); - operationHandlers.put("updatePet", this::updatePet); - operationHandlers.put("updatePetWithForm", this::updatePetWithForm); - operationHandlers.put("uploadFile", this::uploadFile); - } - - private void addPet(RoutingContext routingContext) { - logger.info("addPet()"); - HttpServerResponse response = routingContext.response(); - - Single.defer( () -> { - - String jsonString = routingContext.getBodyAsString(); - Pet pet = jsonString == null ? null : Json.decodeValue(jsonString, new TypeReference(){}); - logger.info("Parameter pet is {}", pet); - return apiImpl.addPet(pet); - }) - .subscribe( - apiResponse -> { - response.setStatusCode(apiResponse.getStatusCode()) - .end(Json.encodePrettily(apiResponse.getData())); - }, error -> { - if (error instanceof ApiException) { - ApiException apiException = (ApiException) error; - response.setStatusCode(apiException.getStatusCode()).end(apiException.getMessage()); - } else { - response.setStatusCode(500).end(error.getMessage()); - } - }).dispose(); - } - - - private void deletePet(RoutingContext routingContext) { - logger.info("deletePet()"); - HttpServerResponse response = routingContext.response(); - - Single.defer( () -> { - Long petId = ParameterCast.toLong(routingContext.pathParams().get("petId")); - String apiKey = ParameterCast.toString(routingContext.request().getHeader("api_key")); - - logger.info("Parameter petId is {}", petId); - logger.info("Parameter apiKey is {}", apiKey); - return apiImpl.deletePet(petId, apiKey); - }) - .subscribe( - apiResponse -> { - response.setStatusCode(apiResponse.getStatusCode()) - .end(Json.encodePrettily(apiResponse.getData())); - }, error -> { - if (error instanceof ApiException) { - ApiException apiException = (ApiException) error; - response.setStatusCode(apiException.getStatusCode()).end(apiException.getMessage()); - } else { - response.setStatusCode(500).end(error.getMessage()); - } - }).dispose(); - } - - - private void findPetsByStatus(RoutingContext routingContext) { - logger.info("findPetsByStatus()"); - HttpServerResponse response = routingContext.response(); - - Single.defer( () -> { - List status = routingContext.request().params().getAll("status"); - - logger.info("Parameter status is {}", status); - return apiImpl.findPetsByStatus(status); - }) - .subscribe( - apiResponse -> { - response.setStatusCode(apiResponse.getStatusCode()) - .end(Json.encodePrettily(apiResponse.getData())); - }, error -> { - if (error instanceof ApiException) { - ApiException apiException = (ApiException) error; - response.setStatusCode(apiException.getStatusCode()).end(apiException.getMessage()); - } else { - response.setStatusCode(500).end(error.getMessage()); - } - }).dispose(); - } - - - private void findPetsByTags(RoutingContext routingContext) { - logger.info("findPetsByTags()"); - HttpServerResponse response = routingContext.response(); - - Single.defer( () -> { - List tags = routingContext.request().params().getAll("tags"); - - logger.info("Parameter tags is {}", tags); - return apiImpl.findPetsByTags(tags); - }) - .subscribe( - apiResponse -> { - response.setStatusCode(apiResponse.getStatusCode()) - .end(Json.encodePrettily(apiResponse.getData())); - }, error -> { - if (error instanceof ApiException) { - ApiException apiException = (ApiException) error; - response.setStatusCode(apiException.getStatusCode()).end(apiException.getMessage()); - } else { - response.setStatusCode(500).end(error.getMessage()); - } - }).dispose(); - } - - - private void getPetById(RoutingContext routingContext) { - logger.info("getPetById()"); - HttpServerResponse response = routingContext.response(); - - Single.defer( () -> { - Long petId = ParameterCast.toLong(routingContext.pathParams().get("petId")); - - logger.info("Parameter petId is {}", petId); - return apiImpl.getPetById(petId); - }) - .subscribe( - apiResponse -> { - response.setStatusCode(apiResponse.getStatusCode()) - .end(Json.encodePrettily(apiResponse.getData())); - }, error -> { - if (error instanceof ApiException) { - ApiException apiException = (ApiException) error; - response.setStatusCode(apiException.getStatusCode()).end(apiException.getMessage()); - } else { - response.setStatusCode(500).end(error.getMessage()); - } - }).dispose(); - } - - - private void updatePet(RoutingContext routingContext) { - logger.info("updatePet()"); - HttpServerResponse response = routingContext.response(); - - Single.defer( () -> { - - String jsonString = routingContext.getBodyAsString(); - Pet pet = jsonString == null ? null : Json.decodeValue(jsonString, new TypeReference(){}); - logger.info("Parameter pet is {}", pet); - return apiImpl.updatePet(pet); - }) - .subscribe( - apiResponse -> { - response.setStatusCode(apiResponse.getStatusCode()) - .end(Json.encodePrettily(apiResponse.getData())); - }, error -> { - if (error instanceof ApiException) { - ApiException apiException = (ApiException) error; - response.setStatusCode(apiException.getStatusCode()).end(apiException.getMessage()); - } else { - response.setStatusCode(500).end(error.getMessage()); - } - }).dispose(); - } - - - private void updatePetWithForm(RoutingContext routingContext) { - logger.info("updatePetWithForm()"); - HttpServerResponse response = routingContext.response(); - - Single.defer( () -> { - Long petId = ParameterCast.toLong(routingContext.pathParams().get("petId")); - String name = ParameterCast.toString(routingContext.request().getFormAttribute("name")); - String status = ParameterCast.toString(routingContext.request().getFormAttribute("status")); - - logger.info("Parameter petId is {}", petId); - logger.info("Parameter name is {}", name); - logger.info("Parameter status is {}", status); - return apiImpl.updatePetWithForm(petId, name, status); - }) - .subscribe( - apiResponse -> { - response.setStatusCode(apiResponse.getStatusCode()) - .end(Json.encodePrettily(apiResponse.getData())); - }, error -> { - if (error instanceof ApiException) { - ApiException apiException = (ApiException) error; - response.setStatusCode(apiException.getStatusCode()).end(apiException.getMessage()); - } else { - response.setStatusCode(500).end(error.getMessage()); - } - }).dispose(); - } - - - private void uploadFile(RoutingContext routingContext) { - logger.info("uploadFile()"); - HttpServerResponse response = routingContext.response(); - - Single.defer( () -> { - Long petId = ParameterCast.toLong(routingContext.pathParams().get("petId")); - String additionalMetadata = ParameterCast.toString(routingContext.request().getFormAttribute("additionalMetadata")); - FileUpload file = routingContext.fileUploads().iterator().next(); - - logger.info("Parameter petId is {}", petId); - logger.info("Parameter additionalMetadata is {}", additionalMetadata); - logger.info("Parameter file is {}", file); - return apiImpl.uploadFile(petId, additionalMetadata, file); - }) - .subscribe( - apiResponse -> { - response.setStatusCode(apiResponse.getStatusCode()) - .end(Json.encodePrettily(apiResponse.getData())); - }, error -> { - if (error instanceof ApiException) { - ApiException apiException = (ApiException) error; - response.setStatusCode(apiException.getStatusCode()).end(apiException.getMessage()); - } else { - response.setStatusCode(500).end(error.getMessage()); - } - }).dispose(); - } - -} diff --git a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/api/PetApiImpl.java b/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/api/PetApiImpl.java deleted file mode 100644 index 113bec1f45e..00000000000 --- a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/api/PetApiImpl.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.openapitools.vertxweb.server.api; - -import io.vertx.ext.web.FileUpload; -import org.openapitools.vertxweb.server.model.ModelApiResponse; -import org.openapitools.vertxweb.server.model.Pet; - -import org.openapitools.vertxweb.server.ApiResponse; -import org.openapitools.vertxweb.server.ApiException; - -import io.reactivex.Single; - -import java.util.List; -import java.util.Map; - -// Implement this class - -public class PetApiImpl implements PetApi { - public Single> addPet(Pet pet) { - return Single.error(new ApiException("Not Implemented").setStatusCode(501)); - } - - public Single> deletePet(Long petId,String apiKey) { - return Single.error(new ApiException("Not Implemented").setStatusCode(501)); - } - - public Single>> findPetsByStatus(List status) { - return Single.error(new ApiException("Not Implemented").setStatusCode(501)); - } - - public Single>> findPetsByTags(List tags) { - return Single.error(new ApiException("Not Implemented").setStatusCode(501)); - } - - public Single> getPetById(Long petId) { - return Single.error(new ApiException("Not Implemented").setStatusCode(501)); - } - - public Single> updatePet(Pet pet) { - return Single.error(new ApiException("Not Implemented").setStatusCode(501)); - } - - public Single> updatePetWithForm(Long petId,String name,String status) { - return Single.error(new ApiException("Not Implemented").setStatusCode(501)); - } - - public Single> uploadFile(Long petId,String additionalMetadata,FileUpload file) { - return Single.error(new ApiException("Not Implemented").setStatusCode(501)); - } - -} diff --git a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/api/StoreApi.java b/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/api/StoreApi.java deleted file mode 100644 index 74219f9a90f..00000000000 --- a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/api/StoreApi.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.openapitools.vertxweb.server.api; - -import org.openapitools.vertxweb.server.model.Order; - -import org.openapitools.vertxweb.server.ApiResponse; - -import io.reactivex.Single; - -import java.util.List; -import java.util.Map; - -public interface StoreApi { - Single> deleteOrder(String orderId); - Single>> getInventory(); - Single> getOrderById(Long orderId); - Single> placeOrder(Order order); -} diff --git a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/api/StoreApiHandler.java b/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/api/StoreApiHandler.java deleted file mode 100644 index 49c14ad203b..00000000000 --- a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/api/StoreApiHandler.java +++ /dev/null @@ -1,131 +0,0 @@ -package org.openapitools.vertxweb.server.api; - -import org.openapitools.vertxweb.server.model.Order; - -import org.openapitools.vertxweb.server.ParameterCast; -import org.openapitools.vertxweb.server.ApiException; - -import com.fasterxml.jackson.core.type.TypeReference; -import io.vertx.core.json.Json; -import io.vertx.core.Handler; -import io.vertx.core.http.HttpServerResponse; -import io.vertx.ext.web.RoutingContext; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import io.reactivex.Single; - -import java.util.List; -import java.util.Map; - -public class StoreApiHandler { - - private static final Logger logger = LoggerFactory.getLogger(StoreApiHandler.class); - private StoreApi apiImpl = new StoreApiImpl(); - - public StoreApiHandler(Map> operationHandlers) { - operationHandlers.put("deleteOrder", this::deleteOrder); - operationHandlers.put("getInventory", this::getInventory); - operationHandlers.put("getOrderById", this::getOrderById); - operationHandlers.put("placeOrder", this::placeOrder); - } - - private void deleteOrder(RoutingContext routingContext) { - logger.info("deleteOrder()"); - HttpServerResponse response = routingContext.response(); - - Single.defer( () -> { - String orderId = ParameterCast.toString(routingContext.pathParams().get("orderId")); - - logger.info("Parameter orderId is {}", orderId); - return apiImpl.deleteOrder(orderId); - }) - .subscribe( - apiResponse -> { - response.setStatusCode(apiResponse.getStatusCode()) - .end(Json.encodePrettily(apiResponse.getData())); - }, error -> { - if (error instanceof ApiException) { - ApiException apiException = (ApiException) error; - response.setStatusCode(apiException.getStatusCode()).end(apiException.getMessage()); - } else { - response.setStatusCode(500).end(error.getMessage()); - } - }).dispose(); - } - - - private void getInventory(RoutingContext routingContext) { - logger.info("getInventory()"); - HttpServerResponse response = routingContext.response(); - - Single.defer( () -> { - - return apiImpl.getInventory(); - }) - .subscribe( - apiResponse -> { - response.setStatusCode(apiResponse.getStatusCode()) - .end(Json.encodePrettily(apiResponse.getData())); - }, error -> { - if (error instanceof ApiException) { - ApiException apiException = (ApiException) error; - response.setStatusCode(apiException.getStatusCode()).end(apiException.getMessage()); - } else { - response.setStatusCode(500).end(error.getMessage()); - } - }).dispose(); - } - - - private void getOrderById(RoutingContext routingContext) { - logger.info("getOrderById()"); - HttpServerResponse response = routingContext.response(); - - Single.defer( () -> { - Long orderId = ParameterCast.toLong(routingContext.pathParams().get("orderId")); - - logger.info("Parameter orderId is {}", orderId); - return apiImpl.getOrderById(orderId); - }) - .subscribe( - apiResponse -> { - response.setStatusCode(apiResponse.getStatusCode()) - .end(Json.encodePrettily(apiResponse.getData())); - }, error -> { - if (error instanceof ApiException) { - ApiException apiException = (ApiException) error; - response.setStatusCode(apiException.getStatusCode()).end(apiException.getMessage()); - } else { - response.setStatusCode(500).end(error.getMessage()); - } - }).dispose(); - } - - - private void placeOrder(RoutingContext routingContext) { - logger.info("placeOrder()"); - HttpServerResponse response = routingContext.response(); - - Single.defer( () -> { - - String jsonString = routingContext.getBodyAsString(); - Order order = jsonString == null ? null : Json.decodeValue(jsonString, new TypeReference(){}); - logger.info("Parameter order is {}", order); - return apiImpl.placeOrder(order); - }) - .subscribe( - apiResponse -> { - response.setStatusCode(apiResponse.getStatusCode()) - .end(Json.encodePrettily(apiResponse.getData())); - }, error -> { - if (error instanceof ApiException) { - ApiException apiException = (ApiException) error; - response.setStatusCode(apiException.getStatusCode()).end(apiException.getMessage()); - } else { - response.setStatusCode(500).end(error.getMessage()); - } - }).dispose(); - } - -} diff --git a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/api/StoreApiImpl.java b/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/api/StoreApiImpl.java deleted file mode 100644 index 98a2ff13c65..00000000000 --- a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/api/StoreApiImpl.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.openapitools.vertxweb.server.api; - -import org.openapitools.vertxweb.server.model.Order; - -import org.openapitools.vertxweb.server.ApiResponse; -import org.openapitools.vertxweb.server.ApiException; - -import io.reactivex.Single; - -import java.util.List; -import java.util.Map; - -// Implement this class - -public class StoreApiImpl implements StoreApi { - public Single> deleteOrder(String orderId) { - return Single.error(new ApiException("Not Implemented").setStatusCode(501)); - } - - public Single>> getInventory() { - return Single.error(new ApiException("Not Implemented").setStatusCode(501)); - } - - public Single> getOrderById(Long orderId) { - return Single.error(new ApiException("Not Implemented").setStatusCode(501)); - } - - public Single> placeOrder(Order order) { - return Single.error(new ApiException("Not Implemented").setStatusCode(501)); - } - -} diff --git a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/api/UserApi.java b/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/api/UserApi.java deleted file mode 100644 index a2b84529d3b..00000000000 --- a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/api/UserApi.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.openapitools.vertxweb.server.api; - -import org.openapitools.vertxweb.server.model.User; - -import org.openapitools.vertxweb.server.ApiResponse; - -import io.reactivex.Single; - -import java.util.List; -import java.util.Map; - -public interface UserApi { - Single> createUser(User user); - Single> createUsersWithArrayInput(List user); - Single> createUsersWithListInput(List user); - Single> deleteUser(String username); - Single> getUserByName(String username); - Single> loginUser(String username,String password); - Single> logoutUser(); - Single> updateUser(String username,User user); -} diff --git a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/api/UserApiHandler.java b/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/api/UserApiHandler.java deleted file mode 100644 index 633541a27f5..00000000000 --- a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/api/UserApiHandler.java +++ /dev/null @@ -1,242 +0,0 @@ -package org.openapitools.vertxweb.server.api; - -import org.openapitools.vertxweb.server.model.User; - -import org.openapitools.vertxweb.server.ParameterCast; -import org.openapitools.vertxweb.server.ApiException; - -import com.fasterxml.jackson.core.type.TypeReference; -import io.vertx.core.json.Json; -import io.vertx.core.Handler; -import io.vertx.core.http.HttpServerResponse; -import io.vertx.ext.web.RoutingContext; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import io.reactivex.Single; - -import java.util.List; -import java.util.Map; - -public class UserApiHandler { - - private static final Logger logger = LoggerFactory.getLogger(UserApiHandler.class); - private UserApi apiImpl = new UserApiImpl(); - - public UserApiHandler(Map> operationHandlers) { - operationHandlers.put("createUser", this::createUser); - operationHandlers.put("createUsersWithArrayInput", this::createUsersWithArrayInput); - operationHandlers.put("createUsersWithListInput", this::createUsersWithListInput); - operationHandlers.put("deleteUser", this::deleteUser); - operationHandlers.put("getUserByName", this::getUserByName); - operationHandlers.put("loginUser", this::loginUser); - operationHandlers.put("logoutUser", this::logoutUser); - operationHandlers.put("updateUser", this::updateUser); - } - - private void createUser(RoutingContext routingContext) { - logger.info("createUser()"); - HttpServerResponse response = routingContext.response(); - - Single.defer( () -> { - - String jsonString = routingContext.getBodyAsString(); - User user = jsonString == null ? null : Json.decodeValue(jsonString, new TypeReference(){}); - logger.info("Parameter user is {}", user); - return apiImpl.createUser(user); - }) - .subscribe( - apiResponse -> { - response.setStatusCode(apiResponse.getStatusCode()) - .end(Json.encodePrettily(apiResponse.getData())); - }, error -> { - if (error instanceof ApiException) { - ApiException apiException = (ApiException) error; - response.setStatusCode(apiException.getStatusCode()).end(apiException.getMessage()); - } else { - response.setStatusCode(500).end(error.getMessage()); - } - }).dispose(); - } - - - private void createUsersWithArrayInput(RoutingContext routingContext) { - logger.info("createUsersWithArrayInput()"); - HttpServerResponse response = routingContext.response(); - - Single.defer( () -> { - - String jsonString = routingContext.getBodyAsString(); - List user = jsonString == null ? null : Json.decodeValue(jsonString, new TypeReference>(){}); - logger.info("Parameter user is {}", user); - return apiImpl.createUsersWithArrayInput(user); - }) - .subscribe( - apiResponse -> { - response.setStatusCode(apiResponse.getStatusCode()) - .end(Json.encodePrettily(apiResponse.getData())); - }, error -> { - if (error instanceof ApiException) { - ApiException apiException = (ApiException) error; - response.setStatusCode(apiException.getStatusCode()).end(apiException.getMessage()); - } else { - response.setStatusCode(500).end(error.getMessage()); - } - }).dispose(); - } - - - private void createUsersWithListInput(RoutingContext routingContext) { - logger.info("createUsersWithListInput()"); - HttpServerResponse response = routingContext.response(); - - Single.defer( () -> { - - String jsonString = routingContext.getBodyAsString(); - List user = jsonString == null ? null : Json.decodeValue(jsonString, new TypeReference>(){}); - logger.info("Parameter user is {}", user); - return apiImpl.createUsersWithListInput(user); - }) - .subscribe( - apiResponse -> { - response.setStatusCode(apiResponse.getStatusCode()) - .end(Json.encodePrettily(apiResponse.getData())); - }, error -> { - if (error instanceof ApiException) { - ApiException apiException = (ApiException) error; - response.setStatusCode(apiException.getStatusCode()).end(apiException.getMessage()); - } else { - response.setStatusCode(500).end(error.getMessage()); - } - }).dispose(); - } - - - private void deleteUser(RoutingContext routingContext) { - logger.info("deleteUser()"); - HttpServerResponse response = routingContext.response(); - - Single.defer( () -> { - String username = ParameterCast.toString(routingContext.pathParams().get("username")); - - logger.info("Parameter username is {}", username); - return apiImpl.deleteUser(username); - }) - .subscribe( - apiResponse -> { - response.setStatusCode(apiResponse.getStatusCode()) - .end(Json.encodePrettily(apiResponse.getData())); - }, error -> { - if (error instanceof ApiException) { - ApiException apiException = (ApiException) error; - response.setStatusCode(apiException.getStatusCode()).end(apiException.getMessage()); - } else { - response.setStatusCode(500).end(error.getMessage()); - } - }).dispose(); - } - - - private void getUserByName(RoutingContext routingContext) { - logger.info("getUserByName()"); - HttpServerResponse response = routingContext.response(); - - Single.defer( () -> { - String username = ParameterCast.toString(routingContext.pathParams().get("username")); - - logger.info("Parameter username is {}", username); - return apiImpl.getUserByName(username); - }) - .subscribe( - apiResponse -> { - response.setStatusCode(apiResponse.getStatusCode()) - .end(Json.encodePrettily(apiResponse.getData())); - }, error -> { - if (error instanceof ApiException) { - ApiException apiException = (ApiException) error; - response.setStatusCode(apiException.getStatusCode()).end(apiException.getMessage()); - } else { - response.setStatusCode(500).end(error.getMessage()); - } - }).dispose(); - } - - - private void loginUser(RoutingContext routingContext) { - logger.info("loginUser()"); - HttpServerResponse response = routingContext.response(); - - Single.defer( () -> { - String username = ParameterCast.toString(routingContext.queryParams().get("username")); - String password = ParameterCast.toString(routingContext.queryParams().get("password")); - - logger.info("Parameter username is {}", username); - logger.info("Parameter password is {}", password); - return apiImpl.loginUser(username, password); - }) - .subscribe( - apiResponse -> { - response.setStatusCode(apiResponse.getStatusCode()) - .end(Json.encodePrettily(apiResponse.getData())); - }, error -> { - if (error instanceof ApiException) { - ApiException apiException = (ApiException) error; - response.setStatusCode(apiException.getStatusCode()).end(apiException.getMessage()); - } else { - response.setStatusCode(500).end(error.getMessage()); - } - }).dispose(); - } - - - private void logoutUser(RoutingContext routingContext) { - logger.info("logoutUser()"); - HttpServerResponse response = routingContext.response(); - - Single.defer( () -> { - - return apiImpl.logoutUser(); - }) - .subscribe( - apiResponse -> { - response.setStatusCode(apiResponse.getStatusCode()) - .end(Json.encodePrettily(apiResponse.getData())); - }, error -> { - if (error instanceof ApiException) { - ApiException apiException = (ApiException) error; - response.setStatusCode(apiException.getStatusCode()).end(apiException.getMessage()); - } else { - response.setStatusCode(500).end(error.getMessage()); - } - }).dispose(); - } - - - private void updateUser(RoutingContext routingContext) { - logger.info("updateUser()"); - HttpServerResponse response = routingContext.response(); - - Single.defer( () -> { - String username = ParameterCast.toString(routingContext.pathParams().get("username")); - - String jsonString = routingContext.getBodyAsString(); - User user = jsonString == null ? null : Json.decodeValue(jsonString, new TypeReference(){}); - logger.info("Parameter username is {}", username); - logger.info("Parameter user is {}", user); - return apiImpl.updateUser(username, user); - }) - .subscribe( - apiResponse -> { - response.setStatusCode(apiResponse.getStatusCode()) - .end(Json.encodePrettily(apiResponse.getData())); - }, error -> { - if (error instanceof ApiException) { - ApiException apiException = (ApiException) error; - response.setStatusCode(apiException.getStatusCode()).end(apiException.getMessage()); - } else { - response.setStatusCode(500).end(error.getMessage()); - } - }).dispose(); - } - -} diff --git a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/api/UserApiImpl.java b/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/api/UserApiImpl.java deleted file mode 100644 index ea4ab28a116..00000000000 --- a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/api/UserApiImpl.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.openapitools.vertxweb.server.api; - -import org.openapitools.vertxweb.server.model.User; - -import org.openapitools.vertxweb.server.ApiResponse; -import org.openapitools.vertxweb.server.ApiException; - -import io.reactivex.Single; - -import java.util.List; -import java.util.Map; - -// Implement this class - -public class UserApiImpl implements UserApi { - public Single> createUser(User user) { - return Single.error(new ApiException("Not Implemented").setStatusCode(501)); - } - - public Single> createUsersWithArrayInput(List user) { - return Single.error(new ApiException("Not Implemented").setStatusCode(501)); - } - - public Single> createUsersWithListInput(List user) { - return Single.error(new ApiException("Not Implemented").setStatusCode(501)); - } - - public Single> deleteUser(String username) { - return Single.error(new ApiException("Not Implemented").setStatusCode(501)); - } - - public Single> getUserByName(String username) { - return Single.error(new ApiException("Not Implemented").setStatusCode(501)); - } - - public Single> loginUser(String username,String password) { - return Single.error(new ApiException("Not Implemented").setStatusCode(501)); - } - - public Single> logoutUser() { - return Single.error(new ApiException("Not Implemented").setStatusCode(501)); - } - - public Single> updateUser(String username,User user) { - return Single.error(new ApiException("Not Implemented").setStatusCode(501)); - } - -} diff --git a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/ApiResponse.java b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/ApiResponse.java similarity index 51% rename from samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/ApiResponse.java rename to samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/ApiResponse.java index 9bac119c1d3..a64f1838f52 100644 --- a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/ApiResponse.java +++ b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/ApiResponse.java @@ -2,28 +2,36 @@ package org.openapitools.vertxweb.server; public class ApiResponse { private final T data; - private Integer statusCode; + private final int statusCode; + + public ApiResponse() { + this(200, null); + } public ApiResponse(T data) { + this(200, data); + } + + public ApiResponse(int statusCode) { + this(statusCode, null); + } + + public ApiResponse(int statusCode, T data) { + this.statusCode = statusCode; this.data = data; } - public ApiResponse() { - this.data = null; + public boolean hasData() { + return data != null; } public T getData() { return data; } - public ApiResponse setStatusCode(Integer statusCode) { - this.statusCode = statusCode; - return this; - } - - public Integer getStatusCode() { + public int getStatusCode() { return statusCode; } } - + diff --git a/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/HttpServerVerticle.java b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/HttpServerVerticle.java new file mode 100644 index 00000000000..ceb3d606acd --- /dev/null +++ b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/HttpServerVerticle.java @@ -0,0 +1,60 @@ +package org.openapitools.vertxweb.server; + +import io.vertx.core.AbstractVerticle; +import io.vertx.core.Promise; +import io.vertx.core.http.HttpServerOptions; +import io.vertx.ext.web.Router; +import io.vertx.ext.web.RoutingContext; +import io.vertx.ext.web.openapi.RouterFactory; +import io.vertx.ext.web.openapi.RouterFactoryOptions; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.openapitools.vertxweb.server.api.PetApiHandler; +import org.openapitools.vertxweb.server.api.StoreApiHandler; +import org.openapitools.vertxweb.server.api.UserApiHandler; + +public class HttpServerVerticle extends AbstractVerticle { + + private static final Logger logger = LoggerFactory.getLogger(HttpServerVerticle.class); + private static final String specFile = "src/main/resources/openapi.yaml"; + + + private final PetApiHandler petHandler = new PetApiHandler(); + private final StoreApiHandler storeHandler = new StoreApiHandler(); + private final UserApiHandler userHandler = new UserApiHandler(); + + @Override + public void start(Promise startPromise) { + RouterFactory.create(vertx, specFile) + .map(factory -> { + factory.setOptions(new RouterFactoryOptions() + // For production use case, you need to enable this flag and provide the proper security handler + .setRequireSecurityHandlers(false) + ); + + petHandler.mount(factory); + storeHandler.mount(factory); + userHandler.mount(factory); + + Router router = factory.createRouter(); + router.errorHandler(400, this::validationFailureHandler); + + return router; + }) + .compose(router -> + vertx.createHttpServer() + .requestHandler(router) + .listen(8080) + ) + .onSuccess(server -> logger.info("Http verticle deploy successful")) + .onFailure(t -> logger.error("Http verticle failed to deploy", t)) + // Complete the start promise + .mapEmpty().onComplete(startPromise); + } + + private void validationFailureHandler(RoutingContext rc) { + rc.response().setStatusCode(400) + .end("Bad Request : " + rc.failure().getMessage()); + } +} diff --git a/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/api/PetApi.java b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/api/PetApi.java new file mode 100644 index 00000000000..9e5985d930f --- /dev/null +++ b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/api/PetApi.java @@ -0,0 +1,24 @@ +package org.openapitools.vertxweb.server.api; + +import io.vertx.ext.web.FileUpload; +import org.openapitools.vertxweb.server.model.ModelApiResponse; +import org.openapitools.vertxweb.server.model.Pet; + +import org.openapitools.vertxweb.server.ApiResponse; + +import io.vertx.core.Future; +import io.vertx.core.json.JsonObject; + +import java.util.List; +import java.util.Map; + +public interface PetApi { + Future> addPet(Pet pet); + Future> deletePet(Long petId, String apiKey); + Future>> findPetsByStatus(List status); + Future>> findPetsByTags(List tags); + Future> getPetById(Long petId); + Future> updatePet(Pet pet); + Future> updatePetWithForm(Long petId, JsonObject formBody); + Future> uploadFile(Long petId, FileUpload file); +} diff --git a/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/api/PetApiHandler.java b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/api/PetApiHandler.java new file mode 100644 index 00000000000..9dd5df60d58 --- /dev/null +++ b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/api/PetApiHandler.java @@ -0,0 +1,227 @@ +package org.openapitools.vertxweb.server.api; + +import io.vertx.ext.web.FileUpload; +import org.openapitools.vertxweb.server.model.ModelApiResponse; +import org.openapitools.vertxweb.server.model.Pet; + +import com.fasterxml.jackson.core.type.TypeReference; +import io.vertx.core.json.jackson.DatabindCodec; +import io.vertx.ext.web.openapi.RouterFactory; +import io.vertx.ext.web.validation.RequestParameters; +import io.vertx.ext.web.validation.RequestParameter; +import io.vertx.ext.web.validation.ValidationHandler; +import io.vertx.ext.web.RoutingContext; +import io.vertx.core.json.JsonObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; +import java.util.Map; + +public class PetApiHandler { + + private static final Logger logger = LoggerFactory.getLogger(PetApiHandler.class); + + private final PetApi apiImpl; + + public PetApiHandler() { + this.apiImpl = new PetApiImpl(); + } + + public void mount(RouterFactory factory) { + factory.operation("addPet").handler(this::addPet); + factory.operation("deletePet").handler(this::deletePet); + factory.operation("findPetsByStatus").handler(this::findPetsByStatus); + factory.operation("findPetsByTags").handler(this::findPetsByTags); + factory.operation("getPetById").handler(this::getPetById); + factory.operation("updatePet").handler(this::updatePet); + factory.operation("updatePetWithForm").handler(this::updatePetWithForm); + factory.operation("uploadFile").handler(this::uploadFile); + } + + private void addPet(RoutingContext routingContext) { + logger.info("addPet()"); + + // Param extraction + RequestParameters requestParameters = routingContext.get(ValidationHandler.REQUEST_CONTEXT_KEY); + + RequestParameter body = requestParameters.body(); + Pet pet = body != null ? DatabindCodec.mapper().convertValue(body.get(), new TypeReference(){}) : null; + + logger.debug("Parameter pet is {}", pet); + + apiImpl.addPet(pet) + .onSuccess(apiResponse -> { + routingContext.response().setStatusCode(apiResponse.getStatusCode()); + if (apiResponse.hasData()) { + routingContext.json(apiResponse.getData()); + } else { + routingContext.response().end(); + } + }) + .onFailure(routingContext::fail); + } + + private void deletePet(RoutingContext routingContext) { + logger.info("deletePet()"); + + // Param extraction + RequestParameters requestParameters = routingContext.get(ValidationHandler.REQUEST_CONTEXT_KEY); + + Long petId = requestParameters.pathParameter("petId") != null ? requestParameters.pathParameter("petId").getLong() : null; + String apiKey = requestParameters.headerParameter("api_key") != null ? requestParameters.headerParameter("api_key").getString() : null; + + logger.debug("Parameter petId is {}", petId); + logger.debug("Parameter apiKey is {}", apiKey); + + apiImpl.deletePet(petId, apiKey) + .onSuccess(apiResponse -> { + routingContext.response().setStatusCode(apiResponse.getStatusCode()); + if (apiResponse.hasData()) { + routingContext.json(apiResponse.getData()); + } else { + routingContext.response().end(); + } + }) + .onFailure(routingContext::fail); + } + + private void findPetsByStatus(RoutingContext routingContext) { + logger.info("findPetsByStatus()"); + + // Param extraction + RequestParameters requestParameters = routingContext.get(ValidationHandler.REQUEST_CONTEXT_KEY); + + List status = requestParameters.queryParameter("status") != null ? DatabindCodec.mapper().convertValue(requestParameters.queryParameter("status").get(), new TypeReference>(){}) : null; + + logger.debug("Parameter status is {}", status); + + apiImpl.findPetsByStatus(status) + .onSuccess(apiResponse -> { + routingContext.response().setStatusCode(apiResponse.getStatusCode()); + if (apiResponse.hasData()) { + routingContext.json(apiResponse.getData()); + } else { + routingContext.response().end(); + } + }) + .onFailure(routingContext::fail); + } + + private void findPetsByTags(RoutingContext routingContext) { + logger.info("findPetsByTags()"); + + // Param extraction + RequestParameters requestParameters = routingContext.get(ValidationHandler.REQUEST_CONTEXT_KEY); + + List tags = requestParameters.queryParameter("tags") != null ? DatabindCodec.mapper().convertValue(requestParameters.queryParameter("tags").get(), new TypeReference>(){}) : null; + + logger.debug("Parameter tags is {}", tags); + + apiImpl.findPetsByTags(tags) + .onSuccess(apiResponse -> { + routingContext.response().setStatusCode(apiResponse.getStatusCode()); + if (apiResponse.hasData()) { + routingContext.json(apiResponse.getData()); + } else { + routingContext.response().end(); + } + }) + .onFailure(routingContext::fail); + } + + private void getPetById(RoutingContext routingContext) { + logger.info("getPetById()"); + + // Param extraction + RequestParameters requestParameters = routingContext.get(ValidationHandler.REQUEST_CONTEXT_KEY); + + Long petId = requestParameters.pathParameter("petId") != null ? requestParameters.pathParameter("petId").getLong() : null; + + logger.debug("Parameter petId is {}", petId); + + apiImpl.getPetById(petId) + .onSuccess(apiResponse -> { + routingContext.response().setStatusCode(apiResponse.getStatusCode()); + if (apiResponse.hasData()) { + routingContext.json(apiResponse.getData()); + } else { + routingContext.response().end(); + } + }) + .onFailure(routingContext::fail); + } + + private void updatePet(RoutingContext routingContext) { + logger.info("updatePet()"); + + // Param extraction + RequestParameters requestParameters = routingContext.get(ValidationHandler.REQUEST_CONTEXT_KEY); + + RequestParameter body = requestParameters.body(); + Pet pet = body != null ? DatabindCodec.mapper().convertValue(body.get(), new TypeReference(){}) : null; + + logger.debug("Parameter pet is {}", pet); + + apiImpl.updatePet(pet) + .onSuccess(apiResponse -> { + routingContext.response().setStatusCode(apiResponse.getStatusCode()); + if (apiResponse.hasData()) { + routingContext.json(apiResponse.getData()); + } else { + routingContext.response().end(); + } + }) + .onFailure(routingContext::fail); + } + + private void updatePetWithForm(RoutingContext routingContext) { + logger.info("updatePetWithForm()"); + + // Param extraction + RequestParameters requestParameters = routingContext.get(ValidationHandler.REQUEST_CONTEXT_KEY); + + Long petId = requestParameters.pathParameter("petId") != null ? requestParameters.pathParameter("petId").getLong() : null; + RequestParameter body = requestParameters.body(); + JsonObject formBody = body != null ? body.getJsonObject() : null; + + logger.debug("Parameter petId is {}", petId); + logger.debug("Parameter formBody is {}", formBody); + + apiImpl.updatePetWithForm(petId, formBody) + .onSuccess(apiResponse -> { + routingContext.response().setStatusCode(apiResponse.getStatusCode()); + if (apiResponse.hasData()) { + routingContext.json(apiResponse.getData()); + } else { + routingContext.response().end(); + } + }) + .onFailure(routingContext::fail); + } + + private void uploadFile(RoutingContext routingContext) { + logger.info("uploadFile()"); + + // Param extraction + RequestParameters requestParameters = routingContext.get(ValidationHandler.REQUEST_CONTEXT_KEY); + + Long petId = requestParameters.pathParameter("petId") != null ? requestParameters.pathParameter("petId").getLong() : null; + FileUpload file = routingContext.fileUploads().iterator().next(); + + logger.debug("Parameter petId is {}", petId); + logger.debug("Parameter file is {}", file); + + apiImpl.uploadFile(petId, file) + .onSuccess(apiResponse -> { + routingContext.response().setStatusCode(apiResponse.getStatusCode()); + if (apiResponse.hasData()) { + routingContext.json(apiResponse.getData()); + } else { + routingContext.response().end(); + } + }) + .onFailure(routingContext::fail); + } + +} diff --git a/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/api/PetApiImpl.java b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/api/PetApiImpl.java new file mode 100644 index 00000000000..8660f228e31 --- /dev/null +++ b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/api/PetApiImpl.java @@ -0,0 +1,51 @@ +package org.openapitools.vertxweb.server.api; + +import io.vertx.ext.web.FileUpload; +import org.openapitools.vertxweb.server.model.ModelApiResponse; +import org.openapitools.vertxweb.server.model.Pet; + +import org.openapitools.vertxweb.server.ApiResponse; + +import io.vertx.core.Future; +import io.vertx.core.json.JsonObject; +import io.vertx.ext.web.handler.impl.HttpStatusException; + +import java.util.List; +import java.util.Map; + +// Implement this class + +public class PetApiImpl implements PetApi { + public Future> addPet(Pet pet) { + return Future.failedFuture(new HttpStatusException(501)); + } + + public Future> deletePet(Long petId, String apiKey) { + return Future.failedFuture(new HttpStatusException(501)); + } + + public Future>> findPetsByStatus(List status) { + return Future.failedFuture(new HttpStatusException(501)); + } + + public Future>> findPetsByTags(List tags) { + return Future.failedFuture(new HttpStatusException(501)); + } + + public Future> getPetById(Long petId) { + return Future.failedFuture(new HttpStatusException(501)); + } + + public Future> updatePet(Pet pet) { + return Future.failedFuture(new HttpStatusException(501)); + } + + public Future> updatePetWithForm(Long petId, JsonObject formBody) { + return Future.failedFuture(new HttpStatusException(501)); + } + + public Future> uploadFile(Long petId, FileUpload file) { + return Future.failedFuture(new HttpStatusException(501)); + } + +} diff --git a/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/api/StoreApi.java b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/api/StoreApi.java new file mode 100644 index 00000000000..35f915bf77c --- /dev/null +++ b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/api/StoreApi.java @@ -0,0 +1,18 @@ +package org.openapitools.vertxweb.server.api; + +import org.openapitools.vertxweb.server.model.Order; + +import org.openapitools.vertxweb.server.ApiResponse; + +import io.vertx.core.Future; +import io.vertx.core.json.JsonObject; + +import java.util.List; +import java.util.Map; + +public interface StoreApi { + Future> deleteOrder(String orderId); + Future>> getInventory(); + Future> getOrderById(Long orderId); + Future> placeOrder(Order order); +} diff --git a/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/api/StoreApiHandler.java b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/api/StoreApiHandler.java new file mode 100644 index 00000000000..32b410ad2f6 --- /dev/null +++ b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/api/StoreApiHandler.java @@ -0,0 +1,123 @@ +package org.openapitools.vertxweb.server.api; + +import org.openapitools.vertxweb.server.model.Order; + +import com.fasterxml.jackson.core.type.TypeReference; +import io.vertx.core.json.jackson.DatabindCodec; +import io.vertx.ext.web.openapi.RouterFactory; +import io.vertx.ext.web.validation.RequestParameters; +import io.vertx.ext.web.validation.RequestParameter; +import io.vertx.ext.web.validation.ValidationHandler; +import io.vertx.ext.web.RoutingContext; +import io.vertx.core.json.JsonObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; +import java.util.Map; + +public class StoreApiHandler { + + private static final Logger logger = LoggerFactory.getLogger(StoreApiHandler.class); + + private final StoreApi apiImpl; + + public StoreApiHandler() { + this.apiImpl = new StoreApiImpl(); + } + + public void mount(RouterFactory factory) { + factory.operation("deleteOrder").handler(this::deleteOrder); + factory.operation("getInventory").handler(this::getInventory); + factory.operation("getOrderById").handler(this::getOrderById); + factory.operation("placeOrder").handler(this::placeOrder); + } + + private void deleteOrder(RoutingContext routingContext) { + logger.info("deleteOrder()"); + + // Param extraction + RequestParameters requestParameters = routingContext.get(ValidationHandler.REQUEST_CONTEXT_KEY); + + String orderId = requestParameters.pathParameter("orderId") != null ? requestParameters.pathParameter("orderId").getString() : null; + + logger.debug("Parameter orderId is {}", orderId); + + apiImpl.deleteOrder(orderId) + .onSuccess(apiResponse -> { + routingContext.response().setStatusCode(apiResponse.getStatusCode()); + if (apiResponse.hasData()) { + routingContext.json(apiResponse.getData()); + } else { + routingContext.response().end(); + } + }) + .onFailure(routingContext::fail); + } + + private void getInventory(RoutingContext routingContext) { + logger.info("getInventory()"); + + // Param extraction + RequestParameters requestParameters = routingContext.get(ValidationHandler.REQUEST_CONTEXT_KEY); + + + + apiImpl.getInventory() + .onSuccess(apiResponse -> { + routingContext.response().setStatusCode(apiResponse.getStatusCode()); + if (apiResponse.hasData()) { + routingContext.json(apiResponse.getData()); + } else { + routingContext.response().end(); + } + }) + .onFailure(routingContext::fail); + } + + private void getOrderById(RoutingContext routingContext) { + logger.info("getOrderById()"); + + // Param extraction + RequestParameters requestParameters = routingContext.get(ValidationHandler.REQUEST_CONTEXT_KEY); + + Long orderId = requestParameters.pathParameter("orderId") != null ? requestParameters.pathParameter("orderId").getLong() : null; + + logger.debug("Parameter orderId is {}", orderId); + + apiImpl.getOrderById(orderId) + .onSuccess(apiResponse -> { + routingContext.response().setStatusCode(apiResponse.getStatusCode()); + if (apiResponse.hasData()) { + routingContext.json(apiResponse.getData()); + } else { + routingContext.response().end(); + } + }) + .onFailure(routingContext::fail); + } + + private void placeOrder(RoutingContext routingContext) { + logger.info("placeOrder()"); + + // Param extraction + RequestParameters requestParameters = routingContext.get(ValidationHandler.REQUEST_CONTEXT_KEY); + + RequestParameter body = requestParameters.body(); + Order order = body != null ? DatabindCodec.mapper().convertValue(body.get(), new TypeReference(){}) : null; + + logger.debug("Parameter order is {}", order); + + apiImpl.placeOrder(order) + .onSuccess(apiResponse -> { + routingContext.response().setStatusCode(apiResponse.getStatusCode()); + if (apiResponse.hasData()) { + routingContext.json(apiResponse.getData()); + } else { + routingContext.response().end(); + } + }) + .onFailure(routingContext::fail); + } + +} diff --git a/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/api/StoreApiImpl.java b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/api/StoreApiImpl.java new file mode 100644 index 00000000000..d542d3be96c --- /dev/null +++ b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/api/StoreApiImpl.java @@ -0,0 +1,33 @@ +package org.openapitools.vertxweb.server.api; + +import org.openapitools.vertxweb.server.model.Order; + +import org.openapitools.vertxweb.server.ApiResponse; + +import io.vertx.core.Future; +import io.vertx.core.json.JsonObject; +import io.vertx.ext.web.handler.impl.HttpStatusException; + +import java.util.List; +import java.util.Map; + +// Implement this class + +public class StoreApiImpl implements StoreApi { + public Future> deleteOrder(String orderId) { + return Future.failedFuture(new HttpStatusException(501)); + } + + public Future>> getInventory() { + return Future.failedFuture(new HttpStatusException(501)); + } + + public Future> getOrderById(Long orderId) { + return Future.failedFuture(new HttpStatusException(501)); + } + + public Future> placeOrder(Order order) { + return Future.failedFuture(new HttpStatusException(501)); + } + +} diff --git a/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/api/UserApi.java b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/api/UserApi.java new file mode 100644 index 00000000000..51a910d032f --- /dev/null +++ b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/api/UserApi.java @@ -0,0 +1,22 @@ +package org.openapitools.vertxweb.server.api; + +import org.openapitools.vertxweb.server.model.User; + +import org.openapitools.vertxweb.server.ApiResponse; + +import io.vertx.core.Future; +import io.vertx.core.json.JsonObject; + +import java.util.List; +import java.util.Map; + +public interface UserApi { + Future> createUser(User user); + Future> createUsersWithArrayInput(List user); + Future> createUsersWithListInput(List user); + Future> deleteUser(String username); + Future> getUserByName(String username); + Future> loginUser(String username, String password); + Future> logoutUser(); + Future> updateUser(String username, User user); +} diff --git a/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/api/UserApiHandler.java b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/api/UserApiHandler.java new file mode 100644 index 00000000000..dfcbd41aef8 --- /dev/null +++ b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/api/UserApiHandler.java @@ -0,0 +1,222 @@ +package org.openapitools.vertxweb.server.api; + +import org.openapitools.vertxweb.server.model.User; + +import com.fasterxml.jackson.core.type.TypeReference; +import io.vertx.core.json.jackson.DatabindCodec; +import io.vertx.ext.web.openapi.RouterFactory; +import io.vertx.ext.web.validation.RequestParameters; +import io.vertx.ext.web.validation.RequestParameter; +import io.vertx.ext.web.validation.ValidationHandler; +import io.vertx.ext.web.RoutingContext; +import io.vertx.core.json.JsonObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; +import java.util.Map; + +public class UserApiHandler { + + private static final Logger logger = LoggerFactory.getLogger(UserApiHandler.class); + + private final UserApi apiImpl; + + public UserApiHandler() { + this.apiImpl = new UserApiImpl(); + } + + public void mount(RouterFactory factory) { + factory.operation("createUser").handler(this::createUser); + factory.operation("createUsersWithArrayInput").handler(this::createUsersWithArrayInput); + factory.operation("createUsersWithListInput").handler(this::createUsersWithListInput); + factory.operation("deleteUser").handler(this::deleteUser); + factory.operation("getUserByName").handler(this::getUserByName); + factory.operation("loginUser").handler(this::loginUser); + factory.operation("logoutUser").handler(this::logoutUser); + factory.operation("updateUser").handler(this::updateUser); + } + + private void createUser(RoutingContext routingContext) { + logger.info("createUser()"); + + // Param extraction + RequestParameters requestParameters = routingContext.get(ValidationHandler.REQUEST_CONTEXT_KEY); + + RequestParameter body = requestParameters.body(); + User user = body != null ? DatabindCodec.mapper().convertValue(body.get(), new TypeReference(){}) : null; + + logger.debug("Parameter user is {}", user); + + apiImpl.createUser(user) + .onSuccess(apiResponse -> { + routingContext.response().setStatusCode(apiResponse.getStatusCode()); + if (apiResponse.hasData()) { + routingContext.json(apiResponse.getData()); + } else { + routingContext.response().end(); + } + }) + .onFailure(routingContext::fail); + } + + private void createUsersWithArrayInput(RoutingContext routingContext) { + logger.info("createUsersWithArrayInput()"); + + // Param extraction + RequestParameters requestParameters = routingContext.get(ValidationHandler.REQUEST_CONTEXT_KEY); + + RequestParameter body = requestParameters.body(); + List user = body != null ? DatabindCodec.mapper().convertValue(body.get(), new TypeReference>(){}) : null; + + logger.debug("Parameter user is {}", user); + + apiImpl.createUsersWithArrayInput(user) + .onSuccess(apiResponse -> { + routingContext.response().setStatusCode(apiResponse.getStatusCode()); + if (apiResponse.hasData()) { + routingContext.json(apiResponse.getData()); + } else { + routingContext.response().end(); + } + }) + .onFailure(routingContext::fail); + } + + private void createUsersWithListInput(RoutingContext routingContext) { + logger.info("createUsersWithListInput()"); + + // Param extraction + RequestParameters requestParameters = routingContext.get(ValidationHandler.REQUEST_CONTEXT_KEY); + + RequestParameter body = requestParameters.body(); + List user = body != null ? DatabindCodec.mapper().convertValue(body.get(), new TypeReference>(){}) : null; + + logger.debug("Parameter user is {}", user); + + apiImpl.createUsersWithListInput(user) + .onSuccess(apiResponse -> { + routingContext.response().setStatusCode(apiResponse.getStatusCode()); + if (apiResponse.hasData()) { + routingContext.json(apiResponse.getData()); + } else { + routingContext.response().end(); + } + }) + .onFailure(routingContext::fail); + } + + private void deleteUser(RoutingContext routingContext) { + logger.info("deleteUser()"); + + // Param extraction + RequestParameters requestParameters = routingContext.get(ValidationHandler.REQUEST_CONTEXT_KEY); + + String username = requestParameters.pathParameter("username") != null ? requestParameters.pathParameter("username").getString() : null; + + logger.debug("Parameter username is {}", username); + + apiImpl.deleteUser(username) + .onSuccess(apiResponse -> { + routingContext.response().setStatusCode(apiResponse.getStatusCode()); + if (apiResponse.hasData()) { + routingContext.json(apiResponse.getData()); + } else { + routingContext.response().end(); + } + }) + .onFailure(routingContext::fail); + } + + private void getUserByName(RoutingContext routingContext) { + logger.info("getUserByName()"); + + // Param extraction + RequestParameters requestParameters = routingContext.get(ValidationHandler.REQUEST_CONTEXT_KEY); + + String username = requestParameters.pathParameter("username") != null ? requestParameters.pathParameter("username").getString() : null; + + logger.debug("Parameter username is {}", username); + + apiImpl.getUserByName(username) + .onSuccess(apiResponse -> { + routingContext.response().setStatusCode(apiResponse.getStatusCode()); + if (apiResponse.hasData()) { + routingContext.json(apiResponse.getData()); + } else { + routingContext.response().end(); + } + }) + .onFailure(routingContext::fail); + } + + private void loginUser(RoutingContext routingContext) { + logger.info("loginUser()"); + + // Param extraction + RequestParameters requestParameters = routingContext.get(ValidationHandler.REQUEST_CONTEXT_KEY); + + String username = requestParameters.queryParameter("username") != null ? requestParameters.queryParameter("username").getString() : null; + String password = requestParameters.queryParameter("password") != null ? requestParameters.queryParameter("password").getString() : null; + + logger.debug("Parameter username is {}", username); + logger.debug("Parameter password is {}", password); + + apiImpl.loginUser(username, password) + .onSuccess(apiResponse -> { + routingContext.response().setStatusCode(apiResponse.getStatusCode()); + if (apiResponse.hasData()) { + routingContext.json(apiResponse.getData()); + } else { + routingContext.response().end(); + } + }) + .onFailure(routingContext::fail); + } + + private void logoutUser(RoutingContext routingContext) { + logger.info("logoutUser()"); + + // Param extraction + RequestParameters requestParameters = routingContext.get(ValidationHandler.REQUEST_CONTEXT_KEY); + + + + apiImpl.logoutUser() + .onSuccess(apiResponse -> { + routingContext.response().setStatusCode(apiResponse.getStatusCode()); + if (apiResponse.hasData()) { + routingContext.json(apiResponse.getData()); + } else { + routingContext.response().end(); + } + }) + .onFailure(routingContext::fail); + } + + private void updateUser(RoutingContext routingContext) { + logger.info("updateUser()"); + + // Param extraction + RequestParameters requestParameters = routingContext.get(ValidationHandler.REQUEST_CONTEXT_KEY); + + String username = requestParameters.pathParameter("username") != null ? requestParameters.pathParameter("username").getString() : null; + RequestParameter body = requestParameters.body(); + User user = body != null ? DatabindCodec.mapper().convertValue(body.get(), new TypeReference(){}) : null; + + logger.debug("Parameter username is {}", username); + logger.debug("Parameter user is {}", user); + + apiImpl.updateUser(username, user) + .onSuccess(apiResponse -> { + routingContext.response().setStatusCode(apiResponse.getStatusCode()); + if (apiResponse.hasData()) { + routingContext.json(apiResponse.getData()); + } else { + routingContext.response().end(); + } + }) + .onFailure(routingContext::fail); + } + +} diff --git a/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/api/UserApiImpl.java b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/api/UserApiImpl.java new file mode 100644 index 00000000000..13b9457de8e --- /dev/null +++ b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/api/UserApiImpl.java @@ -0,0 +1,49 @@ +package org.openapitools.vertxweb.server.api; + +import org.openapitools.vertxweb.server.model.User; + +import org.openapitools.vertxweb.server.ApiResponse; + +import io.vertx.core.Future; +import io.vertx.core.json.JsonObject; +import io.vertx.ext.web.handler.impl.HttpStatusException; + +import java.util.List; +import java.util.Map; + +// Implement this class + +public class UserApiImpl implements UserApi { + public Future> createUser(User user) { + return Future.failedFuture(new HttpStatusException(501)); + } + + public Future> createUsersWithArrayInput(List user) { + return Future.failedFuture(new HttpStatusException(501)); + } + + public Future> createUsersWithListInput(List user) { + return Future.failedFuture(new HttpStatusException(501)); + } + + public Future> deleteUser(String username) { + return Future.failedFuture(new HttpStatusException(501)); + } + + public Future> getUserByName(String username) { + return Future.failedFuture(new HttpStatusException(501)); + } + + public Future> loginUser(String username, String password) { + return Future.failedFuture(new HttpStatusException(501)); + } + + public Future> logoutUser() { + return Future.failedFuture(new HttpStatusException(501)); + } + + public Future> updateUser(String username, User user) { + return Future.failedFuture(new HttpStatusException(501)); + } + +} diff --git a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/model/Category.java b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/model/Category.java similarity index 100% rename from samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/model/Category.java rename to samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/model/Category.java diff --git a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/model/InlineObject.java b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/model/InlineObject.java similarity index 100% rename from samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/model/InlineObject.java rename to samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/model/InlineObject.java diff --git a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/model/InlineObject1.java b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/model/InlineObject1.java similarity index 100% rename from samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/model/InlineObject1.java rename to samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/model/InlineObject1.java diff --git a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/model/ModelApiResponse.java b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/model/ModelApiResponse.java similarity index 100% rename from samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/model/ModelApiResponse.java rename to samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/model/ModelApiResponse.java diff --git a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/model/Order.java b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/model/Order.java similarity index 100% rename from samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/model/Order.java rename to samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/model/Order.java diff --git a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/model/Pet.java b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/model/Pet.java similarity index 100% rename from samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/model/Pet.java rename to samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/model/Pet.java diff --git a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/model/Tag.java b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/model/Tag.java similarity index 100% rename from samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/model/Tag.java rename to samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/model/Tag.java diff --git a/samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/model/User.java b/samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/model/User.java similarity index 100% rename from samples/server/petstore/java-vertx-web/rx/src/main/java/org/openapitools/vertxweb/server/model/User.java rename to samples/server/petstore/java-vertx-web/src/main/java/org/openapitools/vertxweb/server/model/User.java diff --git a/samples/server/petstore/java-vertx-web/rx/src/main/resources/openapi.yaml b/samples/server/petstore/java-vertx-web/src/main/resources/openapi.yaml similarity index 100% rename from samples/server/petstore/java-vertx-web/rx/src/main/resources/openapi.yaml rename to samples/server/petstore/java-vertx-web/src/main/resources/openapi.yaml