Skip to content

Commit 6187e9d

Browse files
authored
Merge pull request #11132 from swagger-api/java-11-support-on-java-generators
Java 11 support on java generators
2 parents 7a1e029 + 0be8145 commit 6187e9d

File tree

28 files changed

+469
-70
lines changed

28 files changed

+469
-70
lines changed
Lines changed: 194 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,194 @@
1+
name: Test Framework JAVA 11
2+
3+
on:
4+
# execute on demand
5+
workflow_dispatch:
6+
branches: ["master", "test-framework", "3.0.0"]
7+
inputs:
8+
language:
9+
description: 'Language'
10+
required: true
11+
specUrl:
12+
description: 'URL of OpenAPI doc'
13+
required: true
14+
default: "https://petstore3.swagger.io/api/v3/openapi.json"
15+
options:
16+
description: 'language options'
17+
default: ''
18+
jobName:
19+
description: 'job name'
20+
required: true
21+
buildCommands:
22+
description: 'build commands for generated code'
23+
required: true
24+
version:
25+
description: 'exact release or snapshot codegen version'
26+
required: true
27+
28+
jobs:
29+
30+
# builds codegen cli and uploads its artifact
31+
build-codegen:
32+
33+
runs-on: ubuntu-latest
34+
35+
strategy:
36+
matrix:
37+
java: [ 11 ]
38+
39+
steps:
40+
- uses: actions/checkout@v2
41+
- uses: actions/setup-java@v1
42+
with:
43+
java-version: ${{ matrix.java }}
44+
- name: build codegen
45+
run: |
46+
mkdir codegen-cli
47+
if [[ ${{ env.VERSION }} == 3* ]]
48+
then
49+
echo "DOWNLOADING ${{ env.VERSION }}"
50+
wget https://repo1.maven.org/maven2/io/swagger/codegen/v3/swagger-codegen-cli/${{ env.VERSION }}/swagger-codegen-cli-${{ env.VERSION }}.jar -O codegen-cli/swagger-codegen-cli.jar
51+
elif [[ ${{ env.VERSION }} == 2* ]]
52+
then
53+
echo "DOWNLOADING ${{ env.VERSION }}"
54+
wget https://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/${{ env.VERSION }}/swagger-codegen-cli-${{ env.VERSION }}.jar -O codegen-cli/swagger-codegen-cli.jar
55+
else
56+
echo "BUILDING ${{ env.VERSION }}"
57+
mvn -version
58+
mvn -q -B package -DskipTests -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -Dmaven.wagon.http.retryHandler.count=3
59+
cp modules/swagger-codegen-cli/target/swagger-codegen-cli.jar codegen-cli
60+
fi
61+
- name: upload codegen cli
62+
uses: actions/upload-artifact@v2
63+
with:
64+
name: codegen-cli
65+
path: codegen-cli
66+
67+
env:
68+
VERSION: ${{ github.event.inputs.version }}
69+
70+
generate:
71+
72+
needs: build-codegen
73+
74+
runs-on: ubuntu-latest
75+
76+
strategy:
77+
matrix:
78+
java: [ 11 ]
79+
80+
81+
outputs:
82+
generate_outcome: ${{ steps.outcome.outputs.generate_outcome }}
83+
84+
steps:
85+
- uses: actions/checkout@v2
86+
- uses: actions/setup-java@v1
87+
with:
88+
java-version: ${{ matrix.java }}
89+
- name: Download codegen cli
90+
uses: actions/download-artifact@v2
91+
with:
92+
name: codegen-cli
93+
- name: generate
94+
id: generate
95+
continue-on-error: true
96+
uses: ./.github/actions/generate
97+
with:
98+
language: ${{ env.LANGUAGE }}
99+
job-name: ${{ env.JOB_NAME }}
100+
spec-url: ${{ env.SPEC_URL }}
101+
options: ${{ env.OPTIONS }}
102+
- id: outcome
103+
run: |
104+
echo "::set-output name=generate_outcome::${{ steps.generate.outcome }}"
105+
echo ${{ steps.generate.outcome }} > generate_outcome_${{ env.JOB_NAME }}
106+
- name: upload generate outcome
107+
uses: actions/upload-artifact@v2
108+
with:
109+
name: ${{ env.JOB_NAME }}generate_outcome
110+
path: generate_outcome_${{ env.JOB_NAME }}
111+
- name: upload generate logs
112+
uses: actions/upload-artifact@v2
113+
with:
114+
name: ${{ env.JOB_NAME }}generate_logs
115+
path: ${{ steps.generate.outputs.logs }}
116+
- name: upload generated code
117+
if: contains(steps.generate.outcome, 'success')
118+
uses: actions/upload-artifact@v2
119+
with:
120+
name: ${{ env.JOB_NAME }}generated
121+
path: ${{ steps.generate.outputs.path }}
122+
123+
env:
124+
LANGUAGE: ${{ github.event.inputs.language }}
125+
JOB_NAME: ${{ github.event.inputs.jobName }}
126+
OPTIONS: ${{ github.event.inputs.options }}
127+
SPEC_URL: ${{ github.event.inputs.specUrl }}
128+
BUILD_COMMANDS: ${{ github.event.inputs.buildCommands }}
129+
VERSION: ${{ github.event.inputs.version }}
130+
131+
build:
132+
133+
needs: generate
134+
if: contains(needs.generate.outputs.generate_outcome, 'success')
135+
runs-on: ubuntu-latest
136+
137+
strategy:
138+
###############################################
139+
##### DYNAMIC: Dependent on build environment
140+
###############################################
141+
matrix:
142+
java-version: [ 11 ]
143+
###############################################
144+
##### END DYNAMIC: Dependent on build environment
145+
###############################################
146+
steps:
147+
- uses: actions/checkout@v2
148+
- name: Download artifacts
149+
uses: actions/download-artifact@v2
150+
with:
151+
name: ${{ env.JOB_NAME }}generated
152+
path: generated/${{ env.JOB_NAME }}
153+
- name: Download logs
154+
uses: actions/download-artifact@v2
155+
with:
156+
name: ${{ env.JOB_NAME }}generate_logs
157+
###############################################
158+
##### DYNAMIC: Dependent on build environment
159+
###############################################
160+
- name: Set up JDK 11
161+
uses: actions/setup-java@v1
162+
with:
163+
java-version: ${{ matrix.java-version }}
164+
###############################################
165+
##### END DYNAMIC: Dependent on build environment
166+
###############################################
167+
- name: build
168+
id: build
169+
uses: ./.github/actions/build
170+
continue-on-error: true
171+
with:
172+
path: generated/${{ env.JOB_NAME }}
173+
job-name: ${{ env.JOB_NAME }}
174+
build-commands: ${{ env.BUILD_COMMANDS }}
175+
- id: outcome
176+
run: |
177+
echo "::set-output name=build_outcome::${{ steps.build.outcome }}"
178+
echo ${{ steps.build.outcome }} > ${{ env.JOB_NAME }}build_outcome
179+
- name: upload build outcome
180+
uses: actions/upload-artifact@v2
181+
with:
182+
name: ${{ env.JOB_NAME }}build_outcome
183+
path: ${{ env.JOB_NAME }}build_outcome
184+
- name: upload logs
185+
uses: actions/upload-artifact@v2
186+
with:
187+
name: ${{ env.JOB_NAME }}logs
188+
path: ${{ steps.build.outputs.logs }}
189+
env:
190+
LANGUAGE: ${{ github.event.inputs.language }}
191+
JOB_NAME: ${{ github.event.inputs.jobName }}
192+
OPTIONS: ${{ github.event.inputs.options }}
193+
SPEC_URL: ${{ github.event.inputs.specUrl }}
194+
BUILD_COMMANDS: ${{ github.event.inputs.buildCommands }}

modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractJavaCodegen.java

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
5858
public static final String DEFAULT_LIBRARY = "<default>";
5959
public static final String DATE_LIBRARY = "dateLibrary";
6060
public static final String JAVA8_MODE = "java8";
61+
public static final String JAVA11_MODE = "java11";
6162
public static final String SUPPORT_ASYNC = "supportAsync";
6263
public static final String WITH_XML = "withXml";
6364
public static final String SUPPORT_JAVA6 = "supportJava6";
@@ -69,6 +70,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
6970
protected String dateLibrary = "threetenbp";
7071
protected boolean supportAsync = false;
7172
protected boolean java8Mode = false;
73+
protected boolean java11Mode = false;
7274
protected boolean withXml = false;
7375
protected String invokerPackage = "io.swagger";
7476
protected String groupId = "io.swagger";
@@ -184,6 +186,7 @@ public AbstractJavaCodegen() {
184186
CliOption dateLibrary = new CliOption(DATE_LIBRARY, "Option. Date library to use");
185187
Map<String, String> dateOptions = new HashMap<String, String>();
186188
dateOptions.put("java8", "Java 8 native JSR310 (preferred for jdk 1.8+) - note: this also sets \"" + JAVA8_MODE + "\" to true");
189+
dateOptions.put("java11", "Java 11 native JSR384 (preferred for jdk 11+) - note: this also sets \"" + JAVA11_MODE + "\" to true");
187190
dateOptions.put("threetenbp", "Backport of JSR310 (preferred for jdk < 1.8)");
188191
dateOptions.put("java8-localdatetime", "Java 8 using LocalDateTime (for legacy app only)");
189192
dateOptions.put("java8-instant", "Java 8 using Instant");
@@ -199,6 +202,13 @@ public AbstractJavaCodegen() {
199202
java8Mode.setEnum(java8ModeOptions);
200203
cliOptions.add(java8Mode);
201204

205+
CliOption java11Mode = new CliOption(JAVA11_MODE, "Option. Use Java11 classes instead of third party equivalents");
206+
Map<String, String> java11ModeOptions = new HashMap<String, String>();
207+
java11ModeOptions.put("true", "Use Java 11 classes");
208+
java11ModeOptions.put("false", "Various third party libraries as needed");
209+
java11Mode.setEnum(java11ModeOptions);
210+
cliOptions.add(java11Mode);
211+
202212
cliOptions.add(CliOption.newBoolean(DISABLE_HTML_ESCAPING, "Disable HTML escaping of JSON strings when using gson (needed to avoid problems with byte[] fields)"));
203213
cliOptions.add(CliOption.newBoolean(CHECK_DUPLICATED_MODEL_NAME, "Check if there are duplicated model names (ignoring case)"));
204214
cliOptions.add(CliOption.newString(ADDITIONAL_MODEL_TYPE_ANNOTATIONS, "Additional annotations for model type(class level annotations)"));
@@ -453,12 +463,10 @@ public void processOpts() {
453463
// used later in recursive import in postProcessingModels
454464
importMapping.put("com.fasterxml.jackson.annotation.JsonProperty", "com.fasterxml.jackson.annotation.JsonCreator");
455465

456-
if (additionalProperties.containsKey(JAVA8_MODE)) {
457-
setJava8Mode(Boolean.parseBoolean(additionalProperties.get(JAVA8_MODE).toString()));
458-
if ( java8Mode ) {
459-
additionalProperties.put("java8", true);
460-
}
461-
}
466+
setJava8Mode(Boolean.parseBoolean(String.valueOf(additionalProperties.get(JAVA8_MODE))));
467+
additionalProperties.put(JAVA8_MODE, java8Mode);
468+
setJava11Mode(Boolean.parseBoolean(String.valueOf(additionalProperties.get(JAVA11_MODE))));
469+
additionalProperties.put(JAVA11_MODE, java11Mode);
462470

463471
if (additionalProperties.containsKey(SUPPORT_ASYNC)) {
464472
setSupportAsync(Boolean.parseBoolean(additionalProperties.get(SUPPORT_ASYNC).toString()));
@@ -1464,6 +1472,10 @@ public void setJava8Mode(boolean enabled) {
14641472
this.java8Mode = enabled;
14651473
}
14661474

1475+
public void setJava11Mode(boolean java11Mode) {
1476+
this.java11Mode = java11Mode;
1477+
}
1478+
14671479
public void setDisableHtmlEscaping(boolean disabled) {
14681480
this.disableHtmlEscaping = disabled;
14691481
}

modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SpringCodegen.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public class SpringCodegen extends AbstractJavaCodegen
2929
public static final String DELEGATE_PATTERN = "delegatePattern";
3030
public static final String SINGLE_CONTENT_TYPES = "singleContentTypes";
3131
public static final String JAVA_8 = "java8";
32+
public static final String JAVA_11 = "java11";
3233
public static final String ASYNC = "async";
3334
public static final String RESPONSE_WRAPPER = "responseWrapper";
3435
public static final String USE_TAGS = "useTags";
@@ -47,6 +48,7 @@ public class SpringCodegen extends AbstractJavaCodegen
4748
protected boolean delegateMethod = false;
4849
protected boolean singleContentTypes = false;
4950
protected boolean java8 = false;
51+
protected boolean java11 = false;
5052
protected boolean async = false;
5153
protected String responseWrapper = "";
5254
protected boolean useTags = false;
@@ -134,6 +136,15 @@ public void processOpts() {
134136
setDateLibrary("java8");
135137
}
136138
}
139+
if (additionalProperties.containsKey(JAVA_11)) {
140+
this.setJava8(Boolean.valueOf(additionalProperties.get(JAVA_11).toString()));
141+
}
142+
if (this.java11) {
143+
additionalProperties.put("javaVersion", "11");
144+
additionalProperties.put("jdk11", "true");
145+
}
146+
147+
additionalProperties.put("isJava8or11", this.java8 || this.java11);
137148

138149
// set invokerPackage as basePackage
139150
if (additionalProperties.containsKey(CodegenConstants.INVOKER_PACKAGE)) {
@@ -174,10 +185,6 @@ public void processOpts() {
174185
this.setSingleContentTypes(Boolean.valueOf(additionalProperties.get(SINGLE_CONTENT_TYPES).toString()));
175186
}
176187

177-
if (additionalProperties.containsKey(JAVA_8)) {
178-
this.setJava8(Boolean.valueOf(additionalProperties.get(JAVA_8).toString()));
179-
}
180-
181188
if (additionalProperties.containsKey(ASYNC)) {
182189
this.setAsync(Boolean.valueOf(additionalProperties.get(ASYNC).toString()));
183190
}
@@ -301,7 +308,7 @@ public void processOpts() {
301308
}
302309
}
303310

304-
if ((!this.delegatePattern && this.java8) || this.delegateMethod) {
311+
if ((!this.delegatePattern && (this.java8 || this.java11)) || this.delegateMethod) {
305312
additionalProperties.put("jdk8-no-delegate", true);
306313
}
307314

@@ -312,8 +319,6 @@ public void processOpts() {
312319
}
313320

314321
if (this.java8) {
315-
additionalProperties.put("javaVersion", "1.8");
316-
additionalProperties.put("jdk8", "true");
317322
if (this.async) {
318323
additionalProperties.put(RESPONSE_WRAPPER, "CompletableFuture");
319324
}
@@ -657,6 +662,8 @@ public void setSingleContentTypes(boolean singleContentTypes) {
657662

658663
public void setJava8(boolean java8) { this.java8 = java8; }
659664

665+
public void setJava11(boolean java11) { this.java11 = java11; }
666+
660667
public void setAsync(boolean async) { this.async = async; }
661668

662669
public void setResponseWrapper(String responseWrapper) { this.responseWrapper = responseWrapper; }

modules/swagger-codegen/src/main/resources/Java/libraries/feign/auth/OAuth.mustache

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,19 +80,19 @@ public class OAuth implements RequestInterceptor {
8080
}
8181
// If first time, get the token
8282
if (expirationTimeMillis == null || System.currentTimeMillis() >= expirationTimeMillis) {
83-
updateAccessToken();
83+
updateAccessToken(template);
8484
}
8585
if (getAccessToken() != null) {
8686
template.header("Authorization", "Bearer " + getAccessToken());
8787
}
8888
}
8989

90-
public synchronized void updateAccessToken() {
90+
public synchronized void updateAccessToken(RequestTemplate template) {
9191
OAuthJSONAccessTokenResponse accessTokenResponse;
9292
try {
9393
accessTokenResponse = oauthClient.accessToken(tokenRequestBuilder.buildBodyMessage());
9494
} catch (Exception e) {
95-
throw new RetryableException(e.getMessage(), e,null);
95+
throw new RetryableException(400, e.getMessage(), template.request().httpMethod(), e, null, template.request());
9696
}
9797
if (accessTokenResponse != null && accessTokenResponse.getAccessToken() != null) {
9898
setAccessToken(accessTokenResponse.getAccessToken(), accessTokenResponse.getExpiresIn());

modules/swagger-codegen/src/main/resources/Java/libraries/feign/pom.mustache

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,22 @@
185185
</plugins>
186186
</build>
187187
</profile>
188+
{{#java11}}
189+
<profile>
190+
<id>jdk11</id>
191+
<activation>
192+
<jdk>[11,)</jdk>
193+
</activation>
194+
<dependencies>
195+
<dependency>
196+
<groupId>com.sun.xml.ws</groupId>
197+
<artifactId>jaxws-rt</artifactId>
198+
<version>2.3.3</version>
199+
<type>pom</type>
200+
</dependency>
201+
</dependencies>
202+
</profile>
203+
{{/java11}}
188204
</profiles>
189205

190206
<dependencies>
@@ -291,12 +307,12 @@
291307
</dependencies>
292308
<properties>
293309
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
294-
<java.version>{{#java8}}1.8{{/java8}}{{^java8}}1.7{{/java8}}</java.version>
310+
<java.version>{{#java11}}11{{/java11}}{{^java11}}{{#java8}}1.8{{/java8}}{{^java8}}1.7{{/java8}}{{/java11}}</java.version>
295311
<maven.compiler.source>${java.version}</maven.compiler.source>
296312
<maven.compiler.target>${java.version}</maven.compiler.target>
297313
<swagger-core-version>1.5.24</swagger-core-version>
298-
<feign-version>9.4.0</feign-version>
299-
<feign-form-version>2.1.0</feign-form-version>
314+
<feign-version>11.6</feign-version>
315+
<feign-form-version>3.8.0</feign-form-version>
300316
<jackson-version>2.11.4</jackson-version>
301317
{{#threetenbp}}
302318
<jackson-threetenbp-version>2.6.4</jackson-threetenbp-version>

0 commit comments

Comments
 (0)