Skip to content

Commit 35bb0f8

Browse files
authored
Merge branch 'master' into fix-enum-type-generator
2 parents 88bf36e + 4303f2a commit 35bb0f8

23 files changed

+811
-6
lines changed

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,14 @@ public AbstractJavaCodegen() {
181181
java8ModeOptions.put("false", "Various third party libraries as needed");
182182
java8Mode.setEnum(java8ModeOptions);
183183
cliOptions.add(java8Mode);
184+
185+
CliOption java11Mode = new CliOption(JAVA11_MODE, "Option. Use Java11 classes instead of third party equivalents");
186+
Map<String, String> java11ModeOptions = new HashMap<String, String>();
187+
java11ModeOptions.put("true", "Use Java 11 classes");
188+
java11ModeOptions.put("false", "Various third party libraries as needed");
189+
java11Mode.setEnum(java11ModeOptions);
190+
cliOptions.add(java11Mode);
191+
184192
cliOptions.add(CliOption.newBoolean(CHECK_DUPLICATED_MODEL_NAME, "Check if there are duplicated model names (ignoring case)"));
185193
}
186194

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

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ public class JavaClientCodegen extends AbstractJavaCodegen implements BeanValida
5353
public static final String RETROFIT_1 = "retrofit";
5454
public static final String RETROFIT_2 = "retrofit2";
5555

56+
public static final String WIREMOCK_OPTION = "wiremock";
57+
5658
protected String gradleWrapperPackage = "gradle.wrapper";
5759
protected boolean useRxJava = false;
5860
protected boolean useRxJava2 = false;
@@ -87,6 +89,8 @@ public JavaClientCodegen() {
8789
cliOptions.add(CliOption.newBoolean(USE_GZIP_FEATURE, "Send gzip-encoded requests"));
8890
cliOptions.add(CliOption.newBoolean(USE_RUNTIME_EXCEPTION, "Use RuntimeException instead of Exception"));
8991

92+
cliOptions.add(CliOption.newBoolean(WIREMOCK_OPTION, "Use wiremock to generate endpoint calls to mock on generated tests."));
93+
9094
supportedLibraries.put("jersey1", "HTTP client: Jersey client 1.19.4. JSON processing: Jackson 2.10.1. Enable gzip request encoding using '-DuseGzipFeature=true'.");
9195
supportedLibraries.put("feign", "HTTP client: OpenFeign 9.4.0. JSON processing: Jackson 2.10.1");
9296
supportedLibraries.put("jersey2", "HTTP client: Jersey client 2.26. JSON processing: Jackson 2.10.1");
@@ -122,6 +126,10 @@ public String getHelp() {
122126

123127
@Override
124128
public void processOpts() {
129+
if (RETROFIT_1.equalsIgnoreCase(library)) {
130+
dateLibrary = "joda";
131+
}
132+
125133
super.processOpts();
126134

127135
if (additionalProperties.containsKey(USE_RX_JAVA)) {
@@ -169,14 +177,23 @@ public void processOpts() {
169177
this.setUseRuntimeException(convertPropertyToBooleanAndWriteBack(USE_RUNTIME_EXCEPTION));
170178
}
171179

180+
if (additionalProperties.containsKey(WIREMOCK_OPTION)) {
181+
final boolean useWireMock = additionalProperties.get(WIREMOCK_OPTION) != null && Boolean.parseBoolean(additionalProperties.get(WIREMOCK_OPTION).toString());
182+
additionalProperties.put(WIREMOCK_OPTION, useWireMock);
183+
}
184+
172185
final String invokerFolder = (sourceFolder + File.separator + invokerPackage).replace(".", File.separator);
173186
final String authFolder = (sourceFolder + File.separator + invokerPackage + ".auth").replace(".", File.separator);
174187
final String apiFolder = (sourceFolder + File.separator + apiPackage).replace(".", File.separator);
175188

176189
//Common files
177190
writeOptional(outputFolder, new SupportingFile("pom.mustache", "", "pom.xml"));
178191
writeOptional(outputFolder, new SupportingFile("README.mustache", "", "README.md"));
179-
writeOptional(outputFolder, new SupportingFile("build.gradle.mustache", "", "build.gradle"));
192+
if (java11Mode) {
193+
writeOptional(outputFolder, new SupportingFile("build.gradle.java11.mustache", "", "build.gradle"));
194+
} else {
195+
writeOptional(outputFolder, new SupportingFile("build.gradle.mustache", "", "build.gradle"));
196+
}
180197
writeOptional(outputFolder, new SupportingFile("build.sbt.mustache", "", "build.sbt"));
181198
writeOptional(outputFolder, new SupportingFile("settings.gradle.mustache", "", "settings.gradle"));
182199
writeOptional(outputFolder, new SupportingFile("gradle.properties.mustache", "", "gradle.properties"));

src/main/resources/handlebars/Java/api_test.mustache

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,63 @@
22

33
package {{package}};
44

5-
import {{invokerPackage}}.ApiException;
65
{{#imports}}import {{import}};
76
{{/imports}}
87
import org.junit.Test;
98
import org.junit.Ignore;
109

10+
{{#wiremock}}
11+
import com.github.tomakehurst.wiremock.WireMockServer;
12+
import com.github.tomakehurst.wiremock.core.WireMockConfiguration;
13+
import java.net.HttpURLConnection;
14+
import org.junit.AfterClass;
15+
import org.junit.BeforeClass;
16+
{{/wiremock}}
17+
1118
{{^fullJavaUtil}}
1219
import java.util.ArrayList;
1320
import java.util.HashMap;
1421
import java.util.List;
1522
import java.util.Map;
1623
{{/fullJavaUtil}}
1724

25+
{{#wiremock}}
26+
import static com.github.tomakehurst.wiremock.client.WireMock.*;
27+
{{/wiremock}}
28+
1829
/**
1930
* API tests for {{classname}}
2031
*/
2132
@Ignore
2233
public class {{classname}}Test {
2334
2435
private final {{classname}} api = new {{classname}}();
36+
{{#wiremock}}
37+
private static WireMockServer wireMockServer;
38+
39+
public {{classname}}Test() {
40+
api.getApiClient().setBasePath("http://localhost:" + wireMockServer.port());
41+
}
42+
43+
@BeforeClass
44+
public static void setUp() {
45+
wireMockServer = new WireMockServer(WireMockConfiguration.wireMockConfig().dynamicPort());
46+
wireMockServer.start();
47+
configureFor(wireMockServer.port());
48+
{{#operations}}
49+
{{#operation}}
50+
stubFor({{toLowerCase httpMethod}}(urlPathMatching("{{{path}}}"))
51+
.willReturn(aResponse()
52+
.withStatus(HttpURLConnection.HTTP_OK)));
53+
{{/operation}}
54+
{{/operations}}
55+
}
56+
57+
@AfterClass
58+
public static void tearDown() {
59+
wireMockServer.stop();
60+
}
61+
{{/wiremock}}
2562

2663
{{#operations}}
2764
{{#operation}}
@@ -32,11 +69,11 @@ public class {{classname}}Test {
3269
*
3370
* {{notes}}
3471
*
35-
* @throws ApiException
72+
* @throws Exception
3673
* if the Api call fails
3774
*/
3875
@Test
39-
public void {{operationId}}Test() throws ApiException {
76+
public void {{operationId}}Test() throws Exception {
4077
{{#parameters}}
4178
{{{dataType}}} {{paramName}} = null;
4279
{{/parameters}}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
plugins {
2+
id 'java'
3+
id 'maven-publish'
4+
}
5+
6+
repositories {
7+
mavenLocal()
8+
maven {
9+
url = uri('https://repo.maven.apache.org/maven2/')
10+
}
11+
}
12+
13+
ext {
14+
swagger_annotations_version = "{{#useOas2}}1.5.24{{/useOas2}}{{^useOas2}}2.0.0{{/useOas2}}"
15+
jackson_version = "{{^threetenbp}}2.11.4{{/threetenbp}}{{#threetenbp}}2.6.4{{/threetenbp}}"
16+
jersey_version = "1.19.4"
17+
jodatime_version = "2.10.5"
18+
junit_version = "4.13.1"
19+
}
20+
21+
dependencies {
22+
{{#useOas2}}
23+
implementation "io.swagger:swagger-annotations:$swagger_annotations_version"
24+
{{/useOas2}}
25+
{{^useOas2}}
26+
implementation "io.swagger.core.v3:swagger-annotations:$swagger_annotations_version"
27+
{{/useOas2}}
28+
implementation "com.sun.jersey:jersey-client:$jersey_version"
29+
implementation "com.sun.jersey.contribs:jersey-multipart:$jersey_version"
30+
implementation "com.fasterxml.jackson.core:jackson-core:$jackson_version"
31+
implementation "com.fasterxml.jackson.core:jackson-annotations:$jackson_version"
32+
implementation "com.fasterxml.jackson.core:jackson-databind:$jackson_version"
33+
implementation "com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:$jackson_version"
34+
{{#joda}}
35+
implementation "com.fasterxml.jackson.datatype:jackson-datatype-joda:$jackson_version"
36+
{{/joda}}
37+
implementation "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:$jackson_version"}
38+
{{#threetenbp}}
39+
implementation "com.github.joschi.jackson:jackson-datatype-threetenbp:$jackson_version"
40+
{{/threetenbp}}
41+
implementation 'com.sun.xml.ws:jaxws-rt:2.3.3'
42+
testImplementation "junit:junit:$junit_version"
43+
{{#wiremock}}
44+
testImplementation "com.github.tomakehurst:wiremock:2.27.2"
45+
{{/wiremock}}
46+
}
47+
48+
group = '{{groupId}}'
49+
version = '{{artifactVersion}}'
50+
description = '{{artifactDescription}}'
51+
52+
java.sourceCompatibility = 11
53+
java.targetCompatibility = 11
54+
55+
tasks.register('testsJar', Jar) {
56+
archiveClassifier = 'tests'
57+
from(sourceSets.test.output)
58+
}
59+
60+
java {
61+
withSourcesJar()
62+
withJavadocJar()
63+
}
64+
65+
publishing {
66+
publications {
67+
maven(MavenPublication) {
68+
from(components.java)
69+
artifact(testsJar)
70+
}
71+
}
72+
}
73+
74+
tasks.withType(JavaCompile) {
75+
options.encoding = 'UTF-8'
76+
}

src/main/resources/handlebars/Java/libraries/feign/api_test.mustache

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,58 @@ import {{invokerPackage}}.ApiClient;
66
import org.junit.Before;
77
import org.junit.Test;
88

9+
{{#wiremock}}
10+
import com.github.tomakehurst.wiremock.WireMockServer;
11+
import com.github.tomakehurst.wiremock.core.WireMockConfiguration;
12+
import java.net.HttpURLConnection;
13+
import org.junit.AfterClass;
14+
{{/wiremock}}
15+
916
{{^fullJavaUtil}}
1017
import java.util.ArrayList;
1118
import java.util.HashMap;
1219
import java.util.List;
1320
import java.util.Map;
1421
{{/fullJavaUtil}}
1522

23+
{{#wiremock}}
24+
import static com.github.tomakehurst.wiremock.client.WireMock.*;
25+
{{/wiremock}}
26+
1627
/**
1728
* API tests for {{classname}}
1829
*/
1930
public class {{classname}}Test {
2031
2132
private {{classname}} api;
2233

34+
{{#wiremock}}
35+
private static WireMockServer wireMockServer;
36+
37+
@Before
38+
public void setup() {
39+
wireMockServer = new WireMockServer(WireMockConfiguration.wireMockConfig().dynamicPort());
40+
wireMockServer.start();
41+
configureFor(wireMockServer.port());
42+
api = new ApiClient().setBasePath("http://localhost:" + wireMockServer.port()).buildClient({{classname}}.class);
43+
{{#operations}}{{#operation}}
44+
stubFor({{toLowerCase httpMethod}}(urlPathMatching("{{{path}}}"))
45+
.willReturn(aResponse()
46+
.withStatus(HttpURLConnection.HTTP_OK)));
47+
{{/operation}}{{/operations}}
48+
}
49+
50+
@AfterClass
51+
public static void tearDown() {
52+
wireMockServer.stop();
53+
}
54+
{{/wiremock}}
55+
{{^wiremock}}
2356
@Before
2457
public void setup() {
2558
api = new ApiClient().buildClient({{classname}}.class);
2659
}
60+
{{/wiremock}}
2761

2862
{{#operations}}{{#operation}}{{#contents}}{{#@first}}
2963
/**
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
plugins {
2+
id 'java'
3+
id 'maven-publish'
4+
}
5+
6+
repositories {
7+
mavenLocal()
8+
maven {
9+
url = uri('https://repo.maven.apache.org/maven2/')
10+
}
11+
}
12+
13+
ext {
14+
swagger_annotations_version = "{{#useOas2}}1.5.24{{/useOas2}}{{^useOas2}}2.0.0{{/useOas2}}"
15+
jackson_version = "2.11.4"
16+
{{#threetenbp}}
17+
threepane_version = "2.6.4"
18+
{{/threetenbp}}
19+
feign_version = "11.6"
20+
feign_form_version = "3.8.0"
21+
junit_version = "4.13.1"
22+
oltu_version = "1.0.2"
23+
}
24+
25+
dependencies {
26+
{{#useOas2}}
27+
implementation "io.swagger:swagger-annotations:$swagger_annotations_version"
28+
{{/useOas2}}
29+
{{^useOas2}}
30+
implementation "io.swagger.core.v3:swagger-annotations:$swagger_annotations_version"
31+
{{/useOas2}}
32+
implementation "io.github.openfeign:feign-core:$feign_version"
33+
implementation "io.github.openfeign:feign-jackson:$feign_version"
34+
implementation "io.github.openfeign:feign-slf4j:$feign_version"
35+
implementation "io.github.openfeign.form:feign-form:$feign_form_version"
36+
implementation "com.fasterxml.jackson.core:jackson-core:$jackson_version"
37+
implementation "com.fasterxml.jackson.core:jackson-annotations:$jackson_version"
38+
implementation "com.fasterxml.jackson.core:jackson-databind:$jackson_version"
39+
{{#joda}}
40+
implementation "com.fasterxml.jackson.datatype:jackson-datatype-joda:$jackson_version"
41+
{{/joda}}
42+
{{#java8}}
43+
implementation "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:$jackson_version"
44+
{{/java8}}
45+
{{#threetenbp}}
46+
implementation "com.github.joschi.jackson:jackson-datatype-threetenbp:$threepane_version"
47+
{{/threetenbp}}
48+
implementation "org.apache.oltu.oauth2:org.apache.oltu.oauth2.client:$oltu_version"
49+
implementation "com.brsanthu:migbase64:2.2"
50+
implementation "com.sun.xml.ws:jaxws-rt:2.3.3"
51+
testImplementation "junit:junit:$junit_version"
52+
testImplementation "com.squareup.okhttp3:mockwebserver:3.6.0"
53+
testImplementation "org.assertj:assertj-core:1.7.1"
54+
{{#wiremock}}
55+
testImplementation "com.github.tomakehurst:wiremock:2.27.2"
56+
{{/wiremock}}
57+
}
58+
59+
group = '{{groupId}}'
60+
version = '{{artifactVersion}}'
61+
description = '{{artifactDescription}}'
62+
63+
java.sourceCompatibility = 11
64+
java.targetCompatibility = 11
65+
66+
tasks.register('testsJar', Jar) {
67+
archiveClassifier = 'tests'
68+
from(sourceSets.test.output)
69+
}
70+
71+
java {
72+
withSourcesJar()
73+
withJavadocJar()
74+
}
75+
76+
publishing {
77+
publications {
78+
maven(MavenPublication) {
79+
from(components.java)
80+
artifact(testsJar)
81+
}
82+
}
83+
}
84+
85+
tasks.withType(JavaCompile) {
86+
options.encoding = 'UTF-8'
87+
}

src/main/resources/handlebars/Java/libraries/feign/pom.mustache

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,14 @@
293293
<version>1.7.1</version>
294294
<scope>test</scope>
295295
</dependency>
296+
{{#wiremock}}
297+
<dependency>
298+
<groupId>com.github.tomakehurst</groupId>
299+
<artifactId>wiremock</artifactId>
300+
<version>2.27.2</version>
301+
<scope>test</scope>
302+
</dependency>
303+
{{/wiremock}}
296304
</dependencies>
297305
<properties>
298306
<java.version>{{#java11}}11{{/java11}}{{^java11}}{{#java8}}1.8{{/java8}}{{^java8}}1.7{{/java8}}{{/java11}}</java.version>

0 commit comments

Comments
 (0)