Skip to content

Commit 13d29e9

Browse files
authored
Merge pull request #1132 from swagger-api/Fyro-Ing-master
Java Vertc Server
2 parents 2f3e459 + d7257a6 commit 13d29e9

21 files changed

+2633
-0
lines changed

src/main/java/io/swagger/codegen/v3/generators/java/JavaVertXServerCodegen.java

Lines changed: 408 additions & 0 deletions
Large diffs are not rendered by default.

src/main/resources/META-INF/services/io.swagger.codegen.v3.CodegenConfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen
1717
io.swagger.codegen.v3.generators.java.JavaJerseyDIServerCodegen
1818
io.swagger.codegen.v3.generators.java.JavaResteasyEapServerCodegen
1919
io.swagger.codegen.v3.generators.java.JavaResteasyServerCodegen
20+
io.swagger.codegen.v3.generators.java.JavaVertXServerCodegen
2021
io.swagger.codegen.v3.generators.java.MicronautCodegen
2122
io.swagger.codegen.v3.generators.java.SpringCodegen
2223
io.swagger.codegen.v3.generators.nodejs.NodeJSServerCodegen
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package {{modelPackage}};
2+
3+
{{#java8}}
4+
import java.time.LocalDate;
5+
import java.time.LocalDateTime;
6+
import java.time.OffsetDateTime;
7+
{{/java8}}
8+
{{#threetenbp}}
9+
import org.threeten.bp.Instant;
10+
import org.threeten.bp.OffsetDateTime;
11+
import org.threeten.bp.ZonedDateTime;
12+
{{/threetenbp}}
13+
{{#joda}}
14+
import org.joda.time.LocalDate;
15+
import org.joda.time.DateTime;
16+
{{/joda}}
17+
18+
public class DataObjectMapper {
19+
{{#java8}}
20+
public static String serializeOffsetDateTime(OffsetDateTime value) {
21+
return value.toString();
22+
}
23+
24+
public static String serializeLocalDateTime(LocalDateTime value) {
25+
return value.toString();
26+
}
27+
28+
public static String serializeLocalDate(LocalDate value) {
29+
return value.toString();
30+
}
31+
{{/java8}}
32+
{{#threetenbp}}
33+
public static String serializeThreetenbpInstant(org.threeten.bp.Instant value) {
34+
return value.toString();
35+
}
36+
37+
public static String serializeThreetenbpOffsetDateTime(org.threeten.bp.OffsetDateTime value) {
38+
return value.toString();
39+
}
40+
41+
public static String serializeThreetenbpZonedDateTime(org.threeten.bp.ZonedDateTime value) {
42+
return value.toString();
43+
}
44+
{{/threetenbp}}
45+
{{#joda}}
46+
public static String serializeJodaLocalDate(org.joda.time.LocalDate value) {
47+
return value.toString();
48+
}
49+
50+
public static String serializeJodaDateTime(org.joda.time.DateTime value) {
51+
return value.toString();
52+
}
53+
{{/joda}}
54+
55+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package {{rootPackage}};
2+
3+
{{#rxInterface}}
4+
import io.reactivex.Completable;
5+
import io.vertx.reactivex.core.AbstractVerticle;
6+
{{/rxInterface}}
7+
{{^rxInterface}}
8+
import io.vertx.core.AbstractVerticle;
9+
import io.vertx.core.Promise;
10+
{{/rxInterface}}
11+
import org.slf4j.Logger;
12+
import org.slf4j.LoggerFactory;
13+
14+
public class MainApiVerticle extends AbstractVerticle {
15+
static final Logger LOGGER = LoggerFactory.getLogger(MainApiVerticle.class);
16+
17+
@Override
18+
{{^rxInterface}}public void start(Promise<Void> startPromise) throws Exception {
19+
vertx.deployVerticle("{{verticlePackage}}.{{title}}Verticle")
20+
.onFailure(error -> {
21+
LOGGER.error("{{title}}Verticle : Deployment failed");
22+
startPromise.fail(error);
23+
})
24+
.onSuccess(server -> {
25+
LOGGER.info("{{title}}Verticle : Deployed");
26+
startPromise.complete();
27+
});
28+
}{{/rxInterface}}
29+
{{#rxInterface}}public Completable rxStart() {
30+
return vertx.rxDeployVerticle("{{verticlePackage}}.{{title}}Verticle")
31+
.doOnError(error -> LOGGER.error("{{title}}Verticle : Deployment failed"))
32+
.doOnSuccess(server -> LOGGER.info("{{title}}Verticle : Deployed"))
33+
.ignoreElement();
34+
}{{/rxInterface}}
35+
36+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Project generated on : {{generatedDate}}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package {{package}};
2+
3+
{{#imports}}import {{import}};
4+
{{/imports}}
5+
6+
{{#useFuture}}
7+
import io.vertx.core.Future;
8+
{{/useFuture}}
9+
{{^useFuture}}
10+
import io.vertx.core.Handler;
11+
import io.vertx.core.AsyncResult;
12+
{{/useFuture}}
13+
import io.vertx.ext.web.validation.RequestParameter;
14+
import io.vertx.ext.web.api.service.ServiceRequest;
15+
import io.vertx.ext.web.api.service.ServiceResponse;
16+
{{#mountFromExtensions}}
17+
import io.vertx.ext.web.api.service.WebApiServiceGen;
18+
{{/mountFromExtensions}}
19+
20+
import java.util.List;
21+
import java.util.Map;
22+
23+
{{#mountFromExtensions}}@WebApiServiceGen{{/mountFromExtensions}}
24+
public interface {{classname}} {
25+
26+
{{#operations}}{{#operation}}{{#@first}} String WEBSERVICE_ADDRESS_{{#lambda.uppercase}}{{classname}}{{/lambda.uppercase}} = "{{#mountFromExtensions}}{{#vendorExtensions}}{{x-event-bus-address}}{{/vendorExtensions}}{{/mountFromExtensions}}{{#mountFromInterface}}{{baseName}}.address{{/mountFromInterface}}";{{/@first}}{{/operation}}{{/operations}}
27+
{{#operations}}{{#operation}} String OPERATION_ID_{{#lambda.uppercase}}{{operationId}}{{/lambda.uppercase}} = "{{operationId}}";
28+
{{/operation}}{{/operations}}
29+
30+
{{#operations}}
31+
{{#operation}}
32+
{{#contents}}
33+
{{#useFuture}}Future<ServiceResponse>{{/useFuture}}{{^useFuture}}void{{/useFuture}} {{#vendorExtensions}}{{x-serviceid}}{{/vendorExtensions}}({{#useDataObject}}{{#parameters}}{{^isBodyParam}}{{^isEnum}}{{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{dataType}}}{{/datatypeWithEnum}}{{/isEnum}}{{#isEnum}}{{{dataType}}}{{/isEnum}} {{paramName}}{{/isBodyParam}}{{#isBodyParam}}{{^isBinary}}{{^parent}}{{^children}}{{{dataType}}} body{{/children}}{{/parent}}{{/isBinary}}{{/isBodyParam}}{{#hasMore}}{{^isBinary}}, {{/isBinary}}{{/hasMore}}{{^hasMore}}{{^isBinary}}, {{/isBinary}}{{/hasMore}}{{/parameters}}{{/useDataObject}}{{^useDataObject}}RequestParameter body, {{/useDataObject}}ServiceRequest request{{^useFuture}}, Handler<AsyncResult<ServiceResponse>> resultHandler{{/useFuture}});
34+
{{/contents}}
35+
{{/operation}}
36+
{{/operations}}
37+
}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package {{verticlePackage}};
2+
3+
{{#mountFromInterface}}{{#apiInfo}}{{#apis}}import {{{package}}}.{{{classFilename}}};
4+
import static {{{package}}}.{{{classFilename}}}.WEBSERVICE_ADDRESS_{{#lambda.uppercase}}{{{classFilename}}}{{/lambda.uppercase}};
5+
{{/apis}}{{/apiInfo}}{{/mountFromInterface}}
6+
7+
{{#rxInterface}}
8+
import io.reactivex.Completable;
9+
import io.vertx.reactivex.core.AbstractVerticle;
10+
import io.vertx.reactivex.core.eventbus.MessageConsumer;
11+
import io.vertx.reactivex.core.http.HttpServer;
12+
import io.vertx.reactivex.ext.web.Router;
13+
import io.vertx.reactivex.ext.web.openapi.RouterBuilder;
14+
{{/rxInterface}}
15+
{{^rxInterface}}
16+
import io.vertx.core.AbstractVerticle;
17+
import io.vertx.core.Future;
18+
import io.vertx.core.Promise;
19+
import io.vertx.core.http.HttpServer;
20+
import io.vertx.ext.web.Router;
21+
import io.vertx.ext.web.openapi.RouterBuilder;
22+
{{/rxInterface}}
23+
import io.vertx.core.http.HttpServerOptions;
24+
import io.vertx.core.json.JsonObject;
25+
import io.vertx.ext.web.openapi.RouterBuilderOptions;
26+
import org.slf4j.Logger;
27+
import org.slf4j.LoggerFactory;
28+
29+
public class {{title}}Verticle extends AbstractVerticle {
30+
static final Logger LOGGER = LoggerFactory.getLogger({{title}}Verticle.class);
31+
32+
HttpServer server;
33+
34+
@Override
35+
{{^rxInterface}}public void start(Promise<Void> startPromise) throws Exception {
36+
RouterBuilder.create(this.vertx, "{{specLocation}}")
37+
.flatMap(routerBuilder -> { {{/rxInterface}}
38+
{{#rxInterface}}public Completable rxStart() {
39+
return RouterBuilder.rxCreate(this.vertx, "{{specLocation}}")
40+
.map(routerBuilder -> { {{/rxInterface}}
41+
RouterBuilderOptions factoryOptions = new RouterBuilderOptions()
42+
.setRequireSecurityHandlers(false)
43+
.setMountResponseContentTypeHandler(true);
44+
routerBuilder.setOptions(factoryOptions);
45+
46+
{{#mountFromExtensions}} routerBuilder.mountServicesFromExtensions();{{/mountFromExtensions}}
47+
{{#mountFromInterface}}{{#apiInfo}}{{#apis}} routerBuilder.mountServiceInterface({{{classFilename}}}.class, WEBSERVICE_ADDRESS_{{#lambda.uppercase}}{{{classFilename}}}{{/lambda.uppercase}});
48+
{{/apis}}{{/apiInfo}}{{/mountFromInterface}}
49+
50+
return {{#rxInterface}}routerBuilder.createRouter(){{/rxInterface}}{{^rxInterface}}Future.succeededFuture(routerBuilder.createRouter()){{/rxInterface}};
51+
})
52+
.flatMap(openapiRouter -> {
53+
Router router = Router.router(vertx);
54+
55+
server = vertx.createHttpServer(new HttpServerOptions().setPort({{serverPort}}).setHost("localhost"))
56+
.requestHandler(router);
57+
58+
router.route("/*").subRouter(openapiRouter);
59+
60+
router.route().last().handler(context ->
61+
context.response()
62+
.setStatusCode(404)
63+
.end(new JsonObject()
64+
.put("message", "Resource not found")
65+
.encode())
66+
);
67+
68+
{{#rxInterface}}return server.rxListen()
69+
.doOnSuccess(server -> LOGGER.info("SwaggerPetstoreVerticle started on port " + server.actualPort()));
70+
})
71+
.ignoreElement();
72+
}
73+
74+
@Override
75+
public Completable rxStop() {
76+
return this.server.rxClose();
77+
}{{/rxInterface}}
78+
{{^rxInterface}}return server.listen()
79+
.onSuccess(server -> LOGGER.info("{{title}}Verticle started on port " + server.actualPort()));
80+
})
81+
.onSuccess(server -> startPromise.complete())
82+
.onFailure(startPromise::fail);
83+
}
84+
85+
@Override
86+
public void stop(Promise<Void> stopPromise) throws Exception {
87+
this.server.close()
88+
.onSuccess(server -> stopPromise.complete())
89+
.onFailure(stopPromise::fail);
90+
}{{/rxInterface}}
91+
92+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{{#required}}
2+
@NotNull
3+
{{/required}}{{#isContainer}}{{^isPrimitiveType}}{{^isEnum}}
4+
@Valid{{/isEnum}}{{/isPrimitiveType}}{{/isContainer}}{{#isNotContainer}}{{^isPrimitiveType}}
5+
@Valid{{/isPrimitiveType}}{{/isNotContainer}}
6+
{{>beanValidationCore}}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{{#pattern}}@Pattern(regexp="{{{pattern}}}"{{#vendorExtensions.x-pattern-message}}, message="{{vendorExtensions.x-pattern-message}}"{{/vendorExtensions.x-pattern-message}}) {{/pattern}}{{!
2+
minLength && maxLength set
3+
}}{{#minLength}}{{#maxLength}}@Size(min={{minLength}},max={{maxLength}}) {{/maxLength}}{{/minLength}}{{!
4+
minLength set, maxLength not
5+
}}{{#minLength}}{{^maxLength}}@Size(min={{minLength}}) {{/maxLength}}{{/minLength}}{{!
6+
minLength not set, maxLength set
7+
}}{{^minLength}}{{#maxLength}}@Size(max={{maxLength}}) {{/maxLength}}{{/minLength}}{{!
8+
@Size: minItems && maxItems set
9+
}}{{#minItems}}{{#maxItems}}@Size(min={{minItems}},max={{maxItems}}) {{/maxItems}}{{/minItems}}{{!
10+
@Size: minItems set, maxItems not
11+
}}{{#minItems}}{{^maxItems}}@Size(min={{minItems}}) {{/maxItems}}{{/minItems}}{{!
12+
@Size: minItems not set && maxItems set
13+
}}{{^minItems}}{{#maxItems}}@Size(max={{maxItems}}) {{/maxItems}}{{/minItems}}{{!
14+
check for integer or long / all others=decimal type with @Decimal*
15+
isInteger set
16+
}}{{#isInteger}}{{#minimum}}@Min({{minimum}}){{/minimum}}{{#maximum}} @Max({{maximum}}) {{/maximum}}{{/isInteger}}{{!
17+
isLong set
18+
}}{{#isLong}}{{#minimum}}@Min({{minimum}}L){{/minimum}}{{#maximum}} @Max({{maximum}}L) {{/maximum}}{{/isLong}}{{!
19+
Not Integer, not Long => we have a decimal value!
20+
}}{{^isInteger}}{{^isLong}}{{#minimum}}@DecimalMin("{{minimum}}"){{/minimum}}{{#maximum}} @DecimalMax("{{maximum}}") {{/maximum}}{{/isLong}}{{/isInteger}}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* {{^description}}Gets or Sets {{{name}}}{{/description}}{{#description}}{{{description}}}{{/description}}
3+
*/
4+
public enum {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}} {
5+
{{#allowableValues}}{{#enumVars}}{{{name}}}({{{value}}}){{^@last}},
6+
{{/@last}}{{#@last}};{{/@last}}{{/enumVars}}{{/allowableValues}}
7+
8+
private {{{datatype}}} value;
9+
10+
{{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}({{{datatype}}} value) {
11+
this.value = value;
12+
}
13+
14+
public {{{datatype}}} getValue() {
15+
return value;
16+
}
17+
18+
@Override
19+
public String toString() {
20+
return String.valueOf(value);
21+
}
22+
23+
public static {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} fromValue({{{datatype}}} value) {
24+
for ({{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} b : {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}.values()) {
25+
if (b.value.equals(value)) {
26+
return b;
27+
}
28+
}
29+
{{^errorOnUnknownEnum}}return null;{{/errorOnUnknownEnum}}{{#errorOnUnknownEnum}}throw new IllegalArgumentException("Unexpected value '" + value + "' for '{{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}' enum.");{{/errorOnUnknownEnum}}
30+
}
31+
{{#useDataObject}}
32+
public static {{{datatype}}} serialize({{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} enumValue) {
33+
return enumValue.getValue();
34+
}{{/useDataObject}}
35+
}

0 commit comments

Comments
 (0)