Skip to content

Commit 4c08ff8

Browse files
authored
[Java][Vertx] Add option to generate methods that return Futures (#21083)
* [Java][Vertx] Add option to generate methods that return Futures * run scripts * update sample config and github workflow * generate samples * rerun script * add vertx-no-nullable to samples workflow
1 parent c67b113 commit 4c08ff8

File tree

229 files changed

+28323
-2
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

229 files changed

+28323
-2
lines changed

.github/workflows/samples-java-client-jdk11.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ jobs:
6161
- samples/client/petstore/java/webclient-swagger2
6262
- samples/client/petstore/java/webclient-useSingleRequestParameter
6363
- samples/client/petstore/java/vertx
64+
- samples/client/petstore/java/vertx-no-nullable
65+
- samples/client/petstore/java/vertx-supportVertxFuture
6466
- samples/client/petstore/java/jersey2-java8-localdatetime
6567
- samples/client/petstore/java/google-api-client
6668
- samples/client/petstore/java/rest-assured
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
generatorName: java
2+
outputDir: samples/client/petstore/java/vertx-supportVertxFuture
3+
library: vertx
4+
inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore-with-fake-endpoints-models-for-testing.yaml
5+
templateDir: modules/openapi-generator/src/main/resources/Java
6+
additionalProperties:
7+
artifactId: petstore-vertx-supportvertxfuture
8+
hideGenerationTimestamp: "true"
9+
dateLibrary: java8
10+
supportVertxFuture: "true"

docs/generators/java-microprofile.md

+1
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
8787
|sourceFolder|source folder for generated code| |src/main/java|
8888
|supportStreaming|Support streaming endpoint (beta)| |false|
8989
|supportUrlQuery|Generate toUrlQueryString in POJO (default to true). Available on `native`, `apache-httpclient` libraries.| |false|
90+
|supportVertxFuture|Also generate api methods that return a vertx Future instead of taking a callback. Only `vertx` supports this option. Requires vertx 4 or greater.| |false|
9091
|testOutput|Set output folder for models and APIs tests| |${project.build.directory}/generated-test-sources/openapi|
9192
|useAbstractionForFiles|Use alternative types instead of java.io.File to allow passing bytes without a file on disk. Available on resttemplate, webclient, restclient, libraries| |false|
9293
|useBeanValidation|Use BeanValidation API annotations| |false|

docs/generators/java.md

+1
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
8787
|sourceFolder|source folder for generated code| |src/main/java|
8888
|supportStreaming|Support streaming endpoint (beta)| |false|
8989
|supportUrlQuery|Generate toUrlQueryString in POJO (default to true). Available on `native`, `apache-httpclient` libraries.| |false|
90+
|supportVertxFuture|Also generate api methods that return a vertx Future instead of taking a callback. Only `vertx` supports this option. Requires vertx 4 or greater.| |false|
9091
|testOutput|Set output folder for models and APIs tests| |${project.build.directory}/generated-test-sources/openapi|
9192
|useAbstractionForFiles|Use alternative types instead of java.io.File to allow passing bytes without a file on disk. Available on resttemplate, webclient, restclient, libraries| |false|
9293
|useBeanValidation|Use BeanValidation API annotations| |false|

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java

+2
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ public class JavaClientCodegen extends AbstractJavaCodegen
101101
public static final String WEBCLIENT_BLOCKING_OPERATIONS = "webclientBlockingOperations";
102102
public static final String USE_ENUM_CASE_INSENSITIVE = "useEnumCaseInsensitive";
103103
public static final String FAIL_ON_UNKNOWN_PROPERTIES = "failOnUnknownProperties";
104+
public static final String SUPPORT_VERTX_FUTURE = "supportVertxFuture";
104105

105106
public static final String SERIALIZATION_LIBRARY_GSON = "gson";
106107
public static final String SERIALIZATION_LIBRARY_JACKSON = "jackson";
@@ -243,6 +244,7 @@ public JavaClientCodegen() {
243244
cliOptions.add(CliOption.newBoolean(SUPPORT_URL_QUERY, "Generate toUrlQueryString in POJO (default to true). Available on `native`, `apache-httpclient` libraries."));
244245
cliOptions.add(CliOption.newBoolean(USE_ENUM_CASE_INSENSITIVE, "Use `equalsIgnoreCase` when String for enum comparison", useEnumCaseInsensitive));
245246
cliOptions.add(CliOption.newBoolean(FAIL_ON_UNKNOWN_PROPERTIES, "Fail Jackson de-serialization on unknown properties", this.failOnUnknownProperties));
247+
cliOptions.add(CliOption.newBoolean(SUPPORT_VERTX_FUTURE, "Also generate api methods that return a vertx Future instead of taking a callback. Only `vertx` supports this option. Requires vertx 4 or greater."));
246248

247249
supportedLibraries.put(JERSEY2, "HTTP client: Jersey client 2.25.1. JSON processing: Jackson 2.17.1");
248250
supportedLibraries.put(JERSEY3, "HTTP client: Jersey client 3.1.1. JSON processing: Jackson 2.17.1");

modules/openapi-generator/src/main/resources/Java/libraries/vertx/api.mustache

+26
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ import {{invokerPackage}}.ApiClient;
55
{{/imports}}
66
import io.vertx.core.AsyncResult;
77
import io.vertx.core.Handler;
8+
{{#supportVertxFuture}}
9+
import io.vertx.core.Future;
10+
import io.vertx.core.Promise;
11+
{{/supportVertxFuture}}
812
import io.vertx.core.json.JsonObject;
913

1014
import java.util.*;
@@ -18,11 +22,33 @@ public interface {{classname}} {
1822
{{/isDeprecated}}
1923
void {{operationId}}({{#allParams}}{{>nullable_var_annotations}} {{{dataType}}} {{paramName}}, {{/allParams}}Handler<AsyncResult<{{{returnType}}}{{^returnType}}Void{{/returnType}}>> handler);
2024

25+
{{#supportVertxFuture}}
26+
{{#isDeprecated}}
27+
@Deprecated
28+
{{/isDeprecated}}
29+
default Future<{{{returnType}}}{{^returnType}}Void{{/returnType}}> {{operationId}}({{#allParams}}{{>nullable_var_annotations}} {{{dataType}}} {{paramName}}{{^-last}}, {{/-last}}{{/allParams}}){
30+
Promise<{{{returnType}}}{{^returnType}}Void{{/returnType}}> promise = Promise.promise();
31+
{{operationId}}({{#allParams}}{{paramName}}, {{/allParams}}promise);
32+
return promise.future();
33+
}
34+
35+
{{/supportVertxFuture}}
2136
{{#isDeprecated}}
2237
@Deprecated
2338
{{/isDeprecated}}
2439
void {{operationId}}({{#allParams}}{{>nullable_var_annotations}} {{{dataType}}} {{paramName}}, {{/allParams}}ApiClient.AuthInfo authInfo, Handler<AsyncResult<{{{returnType}}}{{^returnType}}Void{{/returnType}}>> handler);
2540

41+
{{#supportVertxFuture}}
42+
{{#isDeprecated}}
43+
@Deprecated
44+
{{/isDeprecated}}
45+
default Future<{{{returnType}}}{{^returnType}}Void{{/returnType}}> {{operationId}}({{#allParams}}{{>nullable_var_annotations}} {{{dataType}}} {{paramName}}, {{/allParams}}ApiClient.AuthInfo authInfo){
46+
Promise<{{{returnType}}}{{^returnType}}Void{{/returnType}}> promise = Promise.promise();
47+
{{operationId}}({{#allParams}}{{paramName}}, {{/allParams}}authInfo, promise);
48+
return promise.future();
49+
}
50+
51+
{{/supportVertxFuture}}
2652
{{/operation}}
2753
{{/operations}}
2854
}

modules/openapi-generator/src/main/resources/Java/libraries/vertx/build.gradle.mustache

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ ext {
3232
swagger_annotations_version = "1.5.21"
3333
jackson_version = "2.17.1"
3434
jackson_databind_version = "2.17.1"
35-
vertx_version = "3.5.2"
35+
vertx_version = "{{#supportVertxFuture}}4.0.0{{/supportVertxFuture}}{{^supportVertxFuture}}3.5.2{{/supportVertxFuture}}"
3636
junit_version = "5.10.3"
3737
{{#openApiNullable}}
3838
jackson_databind_nullable_version = "0.2.6"

modules/openapi-generator/src/main/resources/Java/libraries/vertx/pom.mustache

+1-1
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@
299299

300300
<properties>
301301
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
302-
<vertx-version>3.5.2</vertx-version>
302+
<vertx-version>{{#supportVertxFuture}}4.0.0{{/supportVertxFuture}}{{^supportVertxFuture}}3.5.2{{/supportVertxFuture}}</vertx-version>
303303
{{#swagger1AnnotationLibrary}}
304304
<swagger-annotations-version>1.6.6</swagger-annotations-version>
305305
{{/swagger1AnnotationLibrary}}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
2+
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
3+
#
4+
# This file is auto-generated by OpenAPI Generator (https://openapi-generator.tech)
5+
6+
name: Java CI with Maven
7+
8+
on:
9+
push:
10+
branches: [ main, master ]
11+
pull_request:
12+
branches: [ main, master ]
13+
14+
jobs:
15+
build:
16+
name: Build OpenAPI Petstore
17+
runs-on: ubuntu-latest
18+
strategy:
19+
matrix:
20+
java: [ 17, 21 ]
21+
steps:
22+
- uses: actions/checkout@v4
23+
- name: Set up JDK
24+
uses: actions/setup-java@v4
25+
with:
26+
java-version: ${{ matrix.java }}
27+
distribution: 'temurin'
28+
cache: maven
29+
- name: Build with Maven
30+
run: mvn -B package --no-transfer-progress --file pom.xml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
*.class
2+
3+
# Mobile Tools for Java (J2ME)
4+
.mtj.tmp/
5+
6+
# Package Files #
7+
*.jar
8+
*.war
9+
*.ear
10+
11+
# exclude jar for gradle wrapper
12+
!gradle/wrapper/*.jar
13+
14+
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
15+
hs_err_pid*
16+
17+
# build files
18+
**/target
19+
target
20+
.gradle
21+
build
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# OpenAPI Generator Ignore
2+
# Generated by openapi-generator https://github.com/openapitools/openapi-generator
3+
4+
# Use this file to prevent files from being overwritten by the generator.
5+
# The patterns follow closely to .gitignore or .dockerignore.
6+
7+
# As an example, the C# client generator defines ApiClient.cs.
8+
# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
9+
#ApiClient.cs
10+
11+
# You can match any string of characters against a directory, file or extension with a single asterisk (*):
12+
#foo/*/qux
13+
# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
14+
15+
# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
16+
#foo/**/qux
17+
# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
18+
19+
# You can also negate patterns with an exclamation (!).
20+
# For example, you can ignore all files in a docs folder with the file extension .md:
21+
#docs/*.md
22+
# Then explicitly reverse the ignore rule for a single file:
23+
#!docs/README.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
.github/workflows/maven.yml
2+
.gitignore
3+
.travis.yml
4+
README.md
5+
api/openapi.yaml
6+
build.gradle
7+
build.sbt
8+
docs/AdditionalPropertiesClass.md
9+
docs/AllOfWithSingleRef.md
10+
docs/Animal.md
11+
docs/AnotherFakeApi.md
12+
docs/ArrayOfArrayOfNumberOnly.md
13+
docs/ArrayOfNumberOnly.md
14+
docs/ArrayTest.md
15+
docs/Capitalization.md
16+
docs/Cat.md
17+
docs/Category.md
18+
docs/ChildWithNullable.md
19+
docs/ClassModel.md
20+
docs/Client.md
21+
docs/DefaultApi.md
22+
docs/DeprecatedObject.md
23+
docs/Dog.md
24+
docs/EnumArrays.md
25+
docs/EnumClass.md
26+
docs/EnumTest.md
27+
docs/FakeApi.md
28+
docs/FakeBigDecimalMap200Response.md
29+
docs/FakeClassnameTags123Api.md
30+
docs/FileSchemaTestClass.md
31+
docs/Foo.md
32+
docs/FooGetDefaultResponse.md
33+
docs/FormatTest.md
34+
docs/HasOnlyReadOnly.md
35+
docs/HealthCheckResult.md
36+
docs/MapTest.md
37+
docs/MixedPropertiesAndAdditionalPropertiesClass.md
38+
docs/Model200Response.md
39+
docs/ModelApiResponse.md
40+
docs/ModelFile.md
41+
docs/ModelList.md
42+
docs/ModelReturn.md
43+
docs/Name.md
44+
docs/NullableClass.md
45+
docs/NumberOnly.md
46+
docs/ObjectWithDeprecatedFields.md
47+
docs/Order.md
48+
docs/OuterComposite.md
49+
docs/OuterEnum.md
50+
docs/OuterEnumDefaultValue.md
51+
docs/OuterEnumInteger.md
52+
docs/OuterEnumIntegerDefaultValue.md
53+
docs/OuterObjectWithEnumProperty.md
54+
docs/ParentWithNullable.md
55+
docs/Pet.md
56+
docs/PetApi.md
57+
docs/ReadOnlyFirst.md
58+
docs/SingleRefType.md
59+
docs/SpecialModelName.md
60+
docs/StoreApi.md
61+
docs/Tag.md
62+
docs/TestInlineFreeformAdditionalPropertiesRequest.md
63+
docs/User.md
64+
docs/UserApi.md
65+
git_push.sh
66+
gradle.properties
67+
gradle/wrapper/gradle-wrapper.jar
68+
gradle/wrapper/gradle-wrapper.properties
69+
gradlew
70+
gradlew.bat
71+
pom.xml
72+
settings.gradle
73+
src/main/AndroidManifest.xml
74+
src/main/java/org/openapitools/client/ApiClient.java
75+
src/main/java/org/openapitools/client/ApiException.java
76+
src/main/java/org/openapitools/client/Configuration.java
77+
src/main/java/org/openapitools/client/JavaTimeFormatter.java
78+
src/main/java/org/openapitools/client/Pair.java
79+
src/main/java/org/openapitools/client/RFC3339DateFormat.java
80+
src/main/java/org/openapitools/client/RFC3339InstantDeserializer.java
81+
src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java
82+
src/main/java/org/openapitools/client/ServerConfiguration.java
83+
src/main/java/org/openapitools/client/ServerVariable.java
84+
src/main/java/org/openapitools/client/StringUtil.java
85+
src/main/java/org/openapitools/client/api/AnotherFakeApi.java
86+
src/main/java/org/openapitools/client/api/AnotherFakeApiImpl.java
87+
src/main/java/org/openapitools/client/api/DefaultApi.java
88+
src/main/java/org/openapitools/client/api/DefaultApiImpl.java
89+
src/main/java/org/openapitools/client/api/FakeApi.java
90+
src/main/java/org/openapitools/client/api/FakeApiImpl.java
91+
src/main/java/org/openapitools/client/api/FakeClassnameTags123Api.java
92+
src/main/java/org/openapitools/client/api/FakeClassnameTags123ApiImpl.java
93+
src/main/java/org/openapitools/client/api/PetApi.java
94+
src/main/java/org/openapitools/client/api/PetApiImpl.java
95+
src/main/java/org/openapitools/client/api/StoreApi.java
96+
src/main/java/org/openapitools/client/api/StoreApiImpl.java
97+
src/main/java/org/openapitools/client/api/UserApi.java
98+
src/main/java/org/openapitools/client/api/UserApiImpl.java
99+
src/main/java/org/openapitools/client/api/rxjava/AnotherFakeApi.java
100+
src/main/java/org/openapitools/client/api/rxjava/DefaultApi.java
101+
src/main/java/org/openapitools/client/api/rxjava/FakeApi.java
102+
src/main/java/org/openapitools/client/api/rxjava/FakeClassnameTags123Api.java
103+
src/main/java/org/openapitools/client/api/rxjava/PetApi.java
104+
src/main/java/org/openapitools/client/api/rxjava/StoreApi.java
105+
src/main/java/org/openapitools/client/api/rxjava/UserApi.java
106+
src/main/java/org/openapitools/client/auth/ApiKeyAuth.java
107+
src/main/java/org/openapitools/client/auth/Authentication.java
108+
src/main/java/org/openapitools/client/auth/HttpBasicAuth.java
109+
src/main/java/org/openapitools/client/auth/HttpBearerAuth.java
110+
src/main/java/org/openapitools/client/auth/OAuth.java
111+
src/main/java/org/openapitools/client/auth/OAuthFlow.java
112+
src/main/java/org/openapitools/client/model/AdditionalPropertiesClass.java
113+
src/main/java/org/openapitools/client/model/AllOfWithSingleRef.java
114+
src/main/java/org/openapitools/client/model/Animal.java
115+
src/main/java/org/openapitools/client/model/ArrayOfArrayOfNumberOnly.java
116+
src/main/java/org/openapitools/client/model/ArrayOfNumberOnly.java
117+
src/main/java/org/openapitools/client/model/ArrayTest.java
118+
src/main/java/org/openapitools/client/model/Capitalization.java
119+
src/main/java/org/openapitools/client/model/Cat.java
120+
src/main/java/org/openapitools/client/model/Category.java
121+
src/main/java/org/openapitools/client/model/ChildWithNullable.java
122+
src/main/java/org/openapitools/client/model/ClassModel.java
123+
src/main/java/org/openapitools/client/model/Client.java
124+
src/main/java/org/openapitools/client/model/DeprecatedObject.java
125+
src/main/java/org/openapitools/client/model/Dog.java
126+
src/main/java/org/openapitools/client/model/EnumArrays.java
127+
src/main/java/org/openapitools/client/model/EnumClass.java
128+
src/main/java/org/openapitools/client/model/EnumTest.java
129+
src/main/java/org/openapitools/client/model/FakeBigDecimalMap200Response.java
130+
src/main/java/org/openapitools/client/model/FileSchemaTestClass.java
131+
src/main/java/org/openapitools/client/model/Foo.java
132+
src/main/java/org/openapitools/client/model/FooGetDefaultResponse.java
133+
src/main/java/org/openapitools/client/model/FormatTest.java
134+
src/main/java/org/openapitools/client/model/HasOnlyReadOnly.java
135+
src/main/java/org/openapitools/client/model/HealthCheckResult.java
136+
src/main/java/org/openapitools/client/model/MapTest.java
137+
src/main/java/org/openapitools/client/model/MixedPropertiesAndAdditionalPropertiesClass.java
138+
src/main/java/org/openapitools/client/model/Model200Response.java
139+
src/main/java/org/openapitools/client/model/ModelApiResponse.java
140+
src/main/java/org/openapitools/client/model/ModelFile.java
141+
src/main/java/org/openapitools/client/model/ModelList.java
142+
src/main/java/org/openapitools/client/model/ModelReturn.java
143+
src/main/java/org/openapitools/client/model/Name.java
144+
src/main/java/org/openapitools/client/model/NullableClass.java
145+
src/main/java/org/openapitools/client/model/NumberOnly.java
146+
src/main/java/org/openapitools/client/model/ObjectWithDeprecatedFields.java
147+
src/main/java/org/openapitools/client/model/Order.java
148+
src/main/java/org/openapitools/client/model/OuterComposite.java
149+
src/main/java/org/openapitools/client/model/OuterEnum.java
150+
src/main/java/org/openapitools/client/model/OuterEnumDefaultValue.java
151+
src/main/java/org/openapitools/client/model/OuterEnumInteger.java
152+
src/main/java/org/openapitools/client/model/OuterEnumIntegerDefaultValue.java
153+
src/main/java/org/openapitools/client/model/OuterObjectWithEnumProperty.java
154+
src/main/java/org/openapitools/client/model/ParentWithNullable.java
155+
src/main/java/org/openapitools/client/model/Pet.java
156+
src/main/java/org/openapitools/client/model/ReadOnlyFirst.java
157+
src/main/java/org/openapitools/client/model/SingleRefType.java
158+
src/main/java/org/openapitools/client/model/SpecialModelName.java
159+
src/main/java/org/openapitools/client/model/Tag.java
160+
src/main/java/org/openapitools/client/model/TestInlineFreeformAdditionalPropertiesRequest.java
161+
src/main/java/org/openapitools/client/model/User.java
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
7.13.0-SNAPSHOT
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#
2+
# Generated by OpenAPI Generator: https://openapi-generator.tech
3+
#
4+
# Ref: https://docs.travis-ci.com/user/languages/java/
5+
#
6+
language: java
7+
jdk:
8+
- openjdk12
9+
- openjdk11
10+
- openjdk10
11+
- openjdk9
12+
- openjdk8
13+
before_install:
14+
# ensure gradlew has proper permission
15+
- chmod a+x ./gradlew
16+
script:
17+
# test using maven
18+
#- mvn test
19+
# test using gradle
20+
- gradle test
21+
# test using sbt
22+
# - sbt test

0 commit comments

Comments
 (0)