Skip to content

Commit 783f810

Browse files
authored
Allow selection of MP REST API version for MicroProfile REST client g… (#12043)
* Allow selection of MP REST API version for MicroProfile REST client generation * fix typo in pom.xml * fix typo in pom.xml, update samples * add exception when incorrect MP Rest Client version is chosen
1 parent 67b659f commit 783f810

File tree

12 files changed

+478
-89
lines changed

12 files changed

+478
-89
lines changed

docs/generators/java.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
5656
|licenseName|The name of the license| |Unlicense|
5757
|licenseUrl|The URL of the license| |http://unlicense.org|
5858
|microprofileFramework|Framework for microprofile. Possible values "kumuluzee"| |null|
59+
|microprofileRestClientVersion|Version of MicroProfile Rest Client API.| |null|
5960
|modelPackage|package for generated models| |org.openapitools.client.model|
6061
|openApiNullable|Enable OpenAPI Jackson Nullable library| |true|
6162
|parcelableModel|Whether to generate models for Android that implement Parcelable with the okhttp-gson library.| |false|

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

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,9 @@ public class JavaClientCodegen extends AbstractJavaCodegen
8989
public static final String VERTX = "vertx";
9090
public static final String MICROPROFILE = "microprofile";
9191
public static final String APACHE = "apache-httpclient";
92+
public static final String MICROPROFILE_REST_CLIENT_VERSION = "microprofileRestClientVersion";
93+
public static final String MICROPROFILE_REST_CLIENT_DEFAULT_VERSION = "2.0";
94+
public static final String MICROPROFILE_REST_CLIENT_DEFAULT_ROOT_PACKAGE = "javax";
9295

9396
public static final String SERIALIZATION_LIBRARY_GSON = "gson";
9497
public static final String SERIALIZATION_LIBRARY_JACKSON = "jackson";
@@ -122,6 +125,18 @@ public class JavaClientCodegen extends AbstractJavaCodegen
122125
protected String authFolder;
123126
protected String serializationLibrary = null;
124127
protected boolean useOneOfDiscriminatorLookup = false; // use oneOf discriminator's mapping for model lookup
128+
protected String rootJavaEEPackage;
129+
protected Map<String, MpRestClientVersion> mpRestClientVersions = new HashMap<>();
130+
131+
private static class MpRestClientVersion {
132+
public final String rootPackage;
133+
public final String pomTemplate;
134+
135+
public MpRestClientVersion(String rootPackage, String pomTemplate) {
136+
this.rootPackage = rootPackage;
137+
this.pomTemplate = pomTemplate;
138+
}
139+
}
125140

126141
public JavaClientCodegen() {
127142
super();
@@ -138,6 +153,7 @@ public JavaClientCodegen() {
138153
artifactId = "openapi-java-client";
139154
apiPackage = "org.openapitools.client.api";
140155
modelPackage = "org.openapitools.client.model";
156+
rootJavaEEPackage = MICROPROFILE_REST_CLIENT_DEFAULT_ROOT_PACKAGE;
141157

142158
// cliOptions default redefinition need to be updated
143159
updateOption(CodegenConstants.INVOKER_PACKAGE, this.getInvokerPackage());
@@ -166,6 +182,7 @@ public JavaClientCodegen() {
166182
cliOptions.add(CliOption.newString(ERROR_OBJECT_TYPE, "Error Object type. (This option is for okhttp-gson-next-gen only)"));
167183
cliOptions.add(CliOption.newString(CONFIG_KEY, "Config key in @RegisterRestClient. Default to none. Only `microprofile` supports this option."));
168184
cliOptions.add(CliOption.newBoolean(CodegenConstants.USE_ONEOF_DISCRIMINATOR_LOOKUP, CodegenConstants.USE_ONEOF_DISCRIMINATOR_LOOKUP_DESC + " Only jersey2, jersey3, native, okhttp-gson support this option."));
185+
cliOptions.add(CliOption.newString(MICROPROFILE_REST_CLIENT_VERSION, "Version of MicroProfile Rest Client API."));
169186

170187
supportedLibraries.put(JERSEY1, "HTTP client: Jersey client 1.19.x. JSON processing: Jackson 2.9.x. Enable gzip request encoding using '-DuseGzipFeature=true'. IMPORTANT NOTE: jersey 1.x is no longer actively maintained so please upgrade to 'jersey3' or other HTTP libraries instead.");
171188
supportedLibraries.put(JERSEY2, "HTTP client: Jersey client 2.25.1. JSON processing: Jackson 2.9.x");
@@ -203,6 +220,13 @@ public JavaClientCodegen() {
203220
// and the discriminator mapping schemas in the OAS document.
204221
this.setLegacyDiscriminatorBehavior(false);
205222

223+
initMpRestClientVersionToRootPackage();
224+
}
225+
226+
private void initMpRestClientVersionToRootPackage() {
227+
mpRestClientVersions.put("1.4.1", new MpRestClientVersion("javax", "pom.mustache"));
228+
mpRestClientVersions.put("2.0", new MpRestClientVersion("javax", "pom.mustache"));
229+
mpRestClientVersions.put("3.0", new MpRestClientVersion("jakarta", "pom_3.0.mustache"));
206230
}
207231

208232
@Override
@@ -280,6 +304,28 @@ public void processOpts() {
280304
}
281305
additionalProperties.put(MICROPROFILE_FRAMEWORK, microprofileFramework);
282306

307+
if (!additionalProperties.containsKey(MICROPROFILE_REST_CLIENT_VERSION)) {
308+
additionalProperties.put(MICROPROFILE_REST_CLIENT_VERSION, MICROPROFILE_REST_CLIENT_DEFAULT_VERSION);
309+
} else {
310+
String mpRestClientVersion = (String) additionalProperties.get(MICROPROFILE_REST_CLIENT_VERSION);
311+
if (!mpRestClientVersions.containsKey(mpRestClientVersion)){
312+
throw new IllegalArgumentException(
313+
String.format(Locale.ROOT,
314+
"Version %s of MicroProfile Rest Client is not supported or incorrect. Supported versions are %s",
315+
mpRestClientVersion,
316+
String.join(", ", mpRestClientVersions.keySet())
317+
)
318+
);
319+
}
320+
}
321+
if (!additionalProperties.containsKey("rootJavaEEPackage")) {
322+
String mpRestClientVersion = (String) additionalProperties.get(MICROPROFILE_REST_CLIENT_VERSION);
323+
if (mpRestClientVersions.containsKey(mpRestClientVersion)) {
324+
rootJavaEEPackage = mpRestClientVersions.get(mpRestClientVersion).rootPackage;
325+
}
326+
additionalProperties.put("rootJavaEEPackage", rootJavaEEPackage);
327+
}
328+
283329
if (additionalProperties.containsKey(CONFIG_KEY)) {
284330
this.setConfigKey(additionalProperties.get(CONFIG_KEY).toString());
285331
}
@@ -542,7 +588,9 @@ public void processOpts() {
542588
} else if (MICROPROFILE.equals(getLibrary())) {
543589
supportingFiles.clear(); // Don't need extra files provided by Java Codegen
544590
String apiExceptionFolder = (sourceFolder + File.separator + apiPackage().replace('.', File.separatorChar)).replace('/', File.separatorChar);
545-
supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml"));
591+
String mpRestClientVersion = (String) additionalProperties.get(MICROPROFILE_REST_CLIENT_VERSION);
592+
String pomTemplate = mpRestClientVersions.get(mpRestClientVersion).pomTemplate;
593+
supportingFiles.add(new SupportingFile(pomTemplate, "", "pom.xml"));
546594
supportingFiles.add(new SupportingFile("README.mustache", "", "README.md"));
547595
supportingFiles.add(new SupportingFile("api_exception.mustache", apiExceptionFolder, "ApiException.java"));
548596
supportingFiles.add(new SupportingFile("api_exception_mapper.mustache", apiExceptionFolder, "ApiExceptionMapper.java"));

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ import java.io.OutputStream;
99
import java.util.List;
1010
import java.util.Map;
1111
import java.util.Set;
12-
import javax.ws.rs.*;
13-
import javax.ws.rs.core.Response;
14-
import javax.ws.rs.core.MediaType;
12+
import {{rootJavaEEPackage}}.ws.rs.*;
13+
import {{rootJavaEEPackage}}.ws.rs.core.Response;
14+
import {{rootJavaEEPackage}}.ws.rs.core.MediaType;
1515
{{^disableMultipart}}
1616
import org.apache.cxf.jaxrs.ext.multipart.*;
1717
{{/disableMultipart}}

modules/openapi-generator/src/main/resources/Java/libraries/microprofile/api_exception.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{{>licenseInfo}}
22
package {{apiPackage}};
33

4-
import javax.ws.rs.core.Response;
4+
import {{rootJavaEEPackage}}.ws.rs.core.Response;
55

66
public class ApiException extends Exception {
77

modules/openapi-generator/src/main/resources/Java/libraries/microprofile/api_exception_mapper.mustache

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
{{>licenseInfo}}
22
package {{apiPackage}};
33

4-
import javax.ws.rs.core.MultivaluedMap;
5-
import javax.ws.rs.core.Response;
6-
import javax.ws.rs.ext.Provider;
4+
import {{rootJavaEEPackage}}.ws.rs.core.MultivaluedMap;
5+
import {{rootJavaEEPackage}}.ws.rs.core.Response;
6+
import {{rootJavaEEPackage}}.ws.rs.ext.Provider;
77
import org.eclipse.microprofile.rest.client.ext.ResponseExceptionMapper;
88

99
@Provider
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
@javax.annotation.Generated(value = "{{generatorClass}}"{{^hideGenerationTimestamp}}, date = "{{generatedDate}}"{{/hideGenerationTimestamp}})
1+
@{{rootJavaEEPackage}}.annotation.Generated(value = "{{generatorClass}}"{{^hideGenerationTimestamp}}, date = "{{generatedDate}}"{{/hideGenerationTimestamp}})

modules/openapi-generator/src/main/resources/Java/libraries/microprofile/model.mustache

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ package {{package}};
77
import java.io.Serializable;
88
{{/serializableModel}}
99
{{#useBeanValidation}}
10-
import javax.validation.constraints.*;
11-
import javax.validation.Valid;
10+
import {{rootJavaEEPackage}}.validation.constraints.*;
11+
import {{rootJavaEEPackage}}.validation.Valid;
1212
{{/useBeanValidation}}
1313

1414
{{#models}}

modules/openapi-generator/src/main/resources/Java/libraries/microprofile/pojo.mustache

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
{{#withXml}}
2-
import javax.xml.bind.annotation.XmlElement;
3-
import javax.xml.bind.annotation.XmlRootElement;
4-
import javax.xml.bind.annotation.XmlAccessType;
5-
import javax.xml.bind.annotation.XmlAccessorType;
6-
import javax.xml.bind.annotation.XmlType;
7-
import javax.xml.bind.annotation.XmlEnum;
8-
import javax.xml.bind.annotation.XmlEnumValue;
2+
import {{rootJavaEEPackage}}.xml.bind.annotation.XmlElement;
3+
import {{rootJavaEEPackage}}.xml.bind.annotation.XmlRootElement;
4+
import {{rootJavaEEPackage}}.xml.bind.annotation.XmlAccessType;
5+
import {{rootJavaEEPackage}}.xml.bind.annotation.XmlAccessorType;
6+
import {{rootJavaEEPackage}}.xml.bind.annotation.XmlType;
7+
import {{rootJavaEEPackage}}.xml.bind.annotation.XmlEnum;
8+
import {{rootJavaEEPackage}}.xml.bind.annotation.XmlEnumValue;
99
{{/withXml}}
1010
{{^withXml}}
1111
import java.lang.reflect.Type;
12-
import javax.json.bind.annotation.JsonbTypeDeserializer;
13-
import javax.json.bind.annotation.JsonbTypeSerializer;
14-
import javax.json.bind.serializer.DeserializationContext;
15-
import javax.json.bind.serializer.JsonbDeserializer;
16-
import javax.json.bind.serializer.JsonbSerializer;
17-
import javax.json.bind.serializer.SerializationContext;
18-
import javax.json.stream.JsonGenerator;
19-
import javax.json.stream.JsonParser;
20-
import javax.json.bind.annotation.JsonbProperty;
12+
import {{rootJavaEEPackage}}.json.bind.annotation.JsonbTypeDeserializer;
13+
import {{rootJavaEEPackage}}.json.bind.annotation.JsonbTypeSerializer;
14+
import {{rootJavaEEPackage}}.json.bind.serializer.DeserializationContext;
15+
import {{rootJavaEEPackage}}.json.bind.serializer.JsonbDeserializer;
16+
import {{rootJavaEEPackage}}.json.bind.serializer.JsonbSerializer;
17+
import {{rootJavaEEPackage}}.json.bind.serializer.SerializationContext;
18+
import {{rootJavaEEPackage}}.json.stream.JsonGenerator;
19+
import {{rootJavaEEPackage}}.json.stream.JsonParser;
20+
import {{rootJavaEEPackage}}.json.bind.annotation.JsonbProperty;
2121
{{#vendorExtensions.x-has-readonly-properties}}
22-
import javax.json.bind.annotation.JsonbCreator;
22+
import {{rootJavaEEPackage}}.json.bind.annotation.JsonbCreator;
2323
{{/vendorExtensions.x-has-readonly-properties}}
2424
{{/withXml}}
2525

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

Lines changed: 42 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<plugin>
1515
<groupId>org.jboss.jandex</groupId>
1616
<artifactId>jandex-maven-plugin</artifactId>
17-
<version>1.1.0</version>
17+
<version>${jandex.maven.plugin.version}</version>
1818
<executions>
1919
<execution>
2020
<id>make-index</id>
@@ -26,7 +26,7 @@
2626
</plugin>
2727
<plugin>
2828
<artifactId>maven-failsafe-plugin</artifactId>
29-
<version>2.6</version>
29+
<version>${maven.failsafe.plugin.version}</version>
3030
<executions>
3131
<execution>
3232
<goals>
@@ -39,7 +39,7 @@
3939
<plugin>
4040
<groupId>org.codehaus.mojo</groupId>
4141
<artifactId>build-helper-maven-plugin</artifactId>
42-
<version>1.9.1</version>
42+
<version>${build.helper.maven.plugin.version}</version>
4343
<executions>
4444
<execution>
4545
<id>add-source</id>
@@ -61,99 +61,99 @@
6161
<dependency>
6262
<groupId>junit</groupId>
6363
<artifactId>junit</artifactId>
64-
<version>${junit-version}</version>
64+
<version>${junit.version}</version>
6565
<scope>test</scope>
6666
</dependency>
6767
{{#useBeanValidation}}
6868
<!-- Bean Validation API support -->
6969
<dependency>
7070
<groupId>jakarta.validation</groupId>
7171
<artifactId>jakarta.validation-api</artifactId>
72-
<version>${beanvalidation-version}</version>
72+
<version>${beanvalidation.version}</version>
7373
<scope>provided</scope>
7474
</dependency>
7575
{{/useBeanValidation}}
7676
<!-- Eclipse MicroProfile Rest Client -->
7777
<dependency>
7878
<groupId>org.eclipse.microprofile.rest.client</groupId>
7979
<artifactId>microprofile-rest-client-api</artifactId>
80-
<version>1.4.1</version>
80+
<version>${microprofile.rest.client.api.version}</version>
8181
</dependency>
8282

8383
<!-- JAX-RS -->
8484
<dependency>
8585
<groupId>jakarta.ws.rs</groupId>
8686
<artifactId>jakarta.ws.rs-api</artifactId>
87-
<version>${jakarta.ws.rs-version}</version>
87+
<version>${jakarta.ws.rs.version}</version>
8888
<scope>provided</scope>
8989
</dependency>
9090

9191
<dependency>
9292
<groupId>io.smallrye</groupId>
9393
<artifactId>smallrye-rest-client</artifactId>
94-
<version>1.2.1</version>
94+
<version>${smallrye.rest.client.version}</version>
9595
<scope>test</scope>
9696
</dependency>
9797

9898
<dependency>
9999
<groupId>io.smallrye</groupId>
100100
<artifactId>smallrye-config</artifactId>
101-
<version>1.3.5</version>
101+
<version>${smallrye.config.version}</version>
102102
<scope>test</scope>
103103
</dependency>
104104
{{^disableMultipart}}
105105
<dependency>
106106
<groupId>org.apache.cxf</groupId>
107107
<artifactId>cxf-rt-rs-extension-providers</artifactId>
108-
<version>3.2.6</version>
108+
<version>${cxf.rt.rs.extension.providers.version}</version>
109109
</dependency>
110110
{{/disableMultipart}}
111111
<dependency>
112112
<groupId>jakarta.json.bind</groupId>
113113
<artifactId>jakarta.json.bind-api</artifactId>
114-
<version>${jakarta.json.bind-version}</version>
114+
<version>${jakarta.json.bind.version}</version>
115115
</dependency>
116116
<dependency>
117117
<groupId>jakarta.json</groupId>
118118
<artifactId>jakarta.json-api</artifactId>
119-
<version>${jakarta.json-version}</version>
119+
<version>${jakarta.json.version}</version>
120120
</dependency>
121121
<dependency>
122122
<groupId>jakarta.xml.bind</groupId>
123123
<artifactId>jakarta.xml.bind-api</artifactId>
124-
<version>${jakarta.xml.bind-version}</version>
124+
<version>${jakarta.xml.bind.version}</version>
125125
</dependency>
126126
<dependency>
127127
<groupId>com.sun.xml.bind</groupId>
128128
<artifactId>jaxb-core</artifactId>
129-
<version>2.2.11</version>
129+
<version>${jaxb.core.version}</version>
130130
</dependency>
131131
<dependency>
132132
<groupId>com.sun.xml.bind</groupId>
133133
<artifactId>jaxb-impl</artifactId>
134-
<version>2.2.11</version>
134+
<version>${jaxb.impl.version}</version>
135135
</dependency>
136136
<dependency>
137137
<groupId>jakarta.activation</groupId>
138138
<artifactId>jakarta.activation-api</artifactId>
139-
<version>${jakarta.activation-version}</version>
139+
<version>${jakarta.activation.version}</version>
140140
</dependency>
141141
<dependency>
142142
<groupId>com.fasterxml.jackson.datatype</groupId>
143143
<artifactId>jackson-datatype-jsr310</artifactId>
144-
<version>${jackson-jaxrs-version}</version>
144+
<version>${jackson.jaxrs.version}</version>
145145
</dependency>
146146
{{#useBeanValidationFeature}}
147147
<dependency>
148148
<groupId>org.hibernate</groupId>
149149
<artifactId>hibernate-validator</artifactId>
150-
<version>5.2.2.Final</version>
150+
<version>${hibernate.validator.version}</version>
151151
</dependency>
152152
{{/useBeanValidationFeature}}
153153
<dependency>
154154
<groupId>jakarta.annotation</groupId>
155155
<artifactId>jakarta.annotation-api</artifactId>
156-
<version>${jakarta-annotation-version}</version>
156+
<version>${jakarta.annotation.version}</version>
157157
<scope>provided</scope>
158158
</dependency>
159159
</dependencies>
@@ -170,21 +170,31 @@
170170
<java.version>1.8</java.version>
171171
<maven.compiler.source>${java.version}</maven.compiler.source>
172172
<maven.compiler.target>${java.version}</maven.compiler.target>
173-
<swagger-core-version>1.5.18</swagger-core-version>
174-
<jetty-version>9.2.9.v20150224</jetty-version>
175-
<junit-version>4.13.2</junit-version>
176-
<logback-version>1.2.10</logback-version>
173+
<swagger.core.version>1.5.18</swagger.core.version>
174+
<jetty.version>9.2.9.v20150224</jetty.version>
175+
<junit.version>4.13.2</junit.version>
176+
<logback.version>1.2.10</logback.version>
177177
{{#useBeanValidation}}
178-
<beanvalidation-version>2.0.2</beanvalidation-version>
178+
<beanvalidation.version>2.0.2</beanvalidation.version>
179179
{{/useBeanValidation}}
180-
<cxf-version>3.2.7</cxf-version>
181-
<jackson-jaxrs-version>2.9.7</jackson-jaxrs-version>
182-
<jakarta.activation-version>1.2.2</jakarta.activation-version>
183-
<jakarta-annotation-version>1.3.5</jakarta-annotation-version>
184-
<jakarta.json.bind-version>1.0.2</jakarta.json.bind-version>
185-
<jakarta.json-version>1.1.6</jakarta.json-version>
186-
<jakarta.ws.rs-version>2.1.6</jakarta.ws.rs-version>
187-
<jakarta.xml.bind-version>2.3.3</jakarta.xml.bind-version>
180+
<cxf.version>3.2.7</cxf.version>
181+
<jackson.jaxrs.version>2.9.7</jackson.jaxrs.version>
182+
<jakarta.activation.version>1.2.2</jakarta.activation.version>
183+
<jakarta.annotation.version>1.3.5</jakarta.annotation.version>
184+
<jakarta.json.bind.version>1.0.2</jakarta.json.bind.version>
185+
<jakarta.json.version>1.1.6</jakarta.json.version>
186+
<jakarta.ws.rs.version>2.1.6</jakarta.ws.rs.version>
187+
<jakarta.xml.bind.version>2.3.3</jakarta.xml.bind.version>
188+
<microprofile.rest.client.api.version>{{microprofileRestClientVersion}}</microprofile.rest.client.api.version>
189+
<smallrye.rest.client.version>1.2.1</smallrye.rest.client.version>
190+
<smallrye.config.version>1.3.5</smallrye.config.version>
191+
<cxf.rt.rs.extension.providers.version>3.2.6</cxf.rt.rs.extension.providers.version>
192+
<jaxb.core.version>2.2.11</jaxb.core.version>
193+
<jaxb.impl.version>2.2.11</jaxb.impl.version>
194+
<hibernate.validator.version>5.2.2.Final</hibernate.validator.version>
195+
<jandex.maven.plugin.version>1.1.0</jandex.maven.plugin.version>
196+
<maven.failsafe.plugin.version>2.6</maven.failsafe.plugin.version>
197+
<build.helper.maven.plugin.version>1.9.1</build.helper.maven.plugin.version>
188198
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
189199
</properties>
190200
</project>

0 commit comments

Comments
 (0)