Skip to content

Commit 95533d4

Browse files
committed
use java8 OffsetDateTime for clients
1 parent c9939a2 commit 95533d4

24 files changed

Lines changed: 326 additions & 20 deletions

File tree

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4959,6 +4959,15 @@ public String getLibrary() {
49594959
return library;
49604960
}
49614961

4962+
/**
4963+
* check if current active library equals to passed
4964+
* @param library - library to be compared with
4965+
* @return
4966+
*/
4967+
public final boolean isLibrary(String library) {
4968+
return library.equals(this.library);
4969+
}
4970+
49624971
/**
49634972
* Set Git host.
49644973
*

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
import static com.google.common.base.CaseFormat.LOWER_CAMEL;
4040
import static com.google.common.base.CaseFormat.UPPER_UNDERSCORE;
4141
import static java.util.Collections.sort;
42-
import static org.openapitools.codegen.utils.OnceLogger.once;
4342
import static org.openapitools.codegen.utils.StringUtils.camelize;
4443

4544
public class JavaClientCodegen extends AbstractJavaCodegen
@@ -310,13 +309,16 @@ public void processOpts() {
310309
supportingFiles.add(new SupportingFile("ServerVariable.mustache", invokerFolder, "ServerVariable.java"));
311310
supportingFiles.add(new SupportingFile("openapi.mustache", "api", "openapi.yaml"));
312311

312+
if (dateLibrary.equals("java8") && (isLibrary(WEBCLIENT) || isLibrary(VERTX) || isLibrary(RESTTEMPLATE) || isLibrary(RESTEASY) || isLibrary(MICROPROFILE) || isLibrary(JERSEY2))) {
313+
supportingFiles.add(new SupportingFile("JavaTimeFormatter.mustache", invokerFolder, "JavaTimeFormatter.java"));
314+
}
313315

314-
if (!(RESTTEMPLATE.equals(getLibrary()) || REST_ASSURED.equals(getLibrary()) || NATIVE.equals(getLibrary()) || MICROPROFILE.equals(getLibrary()))) {
316+
if (!(RESTTEMPLATE.equals(getLibrary()) || isLibrary(REST_ASSURED) || isLibrary(NATIVE) || isLibrary(MICROPROFILE))) {
315317
supportingFiles.add(new SupportingFile("StringUtil.mustache", invokerFolder, "StringUtil.java"));
316318
}
317319

318320
// google-api-client doesn't use the OpenAPI auth, because it uses Google Credential directly (HttpRequestInitializer)
319-
if (!(GOOGLE_API_CLIENT.equals(getLibrary()) || REST_ASSURED.equals(getLibrary()) || NATIVE.equals(getLibrary()) || MICROPROFILE.equals(getLibrary()))) {
321+
if (!(isLibrary(GOOGLE_API_CLIENT) || isLibrary(REST_ASSURED) || isLibrary(NATIVE) || isLibrary(MICROPROFILE))) {
320322
supportingFiles.add(new SupportingFile("auth/HttpBasicAuth.mustache", authFolder, "HttpBasicAuth.java"));
321323
supportingFiles.add(new SupportingFile("auth/HttpBearerAuth.mustache", authFolder, "HttpBearerAuth.java"));
322324
supportingFiles.add(new SupportingFile("auth/ApiKeyAuth.mustache", authFolder, "ApiKeyAuth.java"));

modules/openapi-generator/src/main/resources/Java/ApiClient.mustache

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import com.fasterxml.jackson.datatype.joda.JodaModule;
1212
{{/joda}}
1313
{{#java8}}
1414
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
15+
import java.time.OffsetDateTime;
1516
{{/java8}}
1617
{{#threetenbp}}
1718
import com.fasterxml.jackson.datatype.threetenbp.ThreeTenModule;
@@ -67,7 +68,7 @@ import {{invokerPackage}}.auth.OAuth;
6768
{{/hasOAuthMethods}}
6869

6970
{{>generatedAnnotation}}
70-
public class ApiClient {
71+
public class ApiClient{{#java8}} extends JavaTimeFormatter{{/java8}} {
7172
private Map<String, String> defaultHeaderMap = new HashMap<String, String>();
7273
private Map<String, String> defaultCookieMap = new HashMap<String, String>();
7374
private String basePath = "{{{basePath}}}";
@@ -499,7 +500,9 @@ public class ApiClient {
499500
return "";
500501
} else if (param instanceof Date) {
501502
return formatDate((Date) param);
502-
} else if (param instanceof Collection) {
503+
} {{#java8}}else if (param instanceof OffsetDateTime) {
504+
return formatOffsetDateTime((OffsetDateTime) param);
505+
} {{/java8}}else if (param instanceof Collection) {
503506
StringBuilder b = new StringBuilder();
504507
for(Object o : (Collection<?>)param) {
505508
if(b.length() > 0) {
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{{>licenseInfo}}
2+
package {{invokerPackage}};
3+
4+
import java.time.OffsetDateTime;
5+
import java.time.format.DateTimeFormatter;
6+
import java.time.format.DateTimeParseException;
7+
8+
{{>generatedAnnotation}}
9+
public class JavaTimeFormatter {
10+
11+
private DateTimeFormatter offsetDateTimeFormatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
12+
13+
public DateTimeFormatter getOffsetDateTimeFormatter() {
14+
return offsetDateTimeFormatter;
15+
}
16+
17+
public void setOffsetDateTimeFormatter(DateTimeFormatter offsetDateTimeFormatter) {
18+
this.offsetDateTimeFormatter = offsetDateTimeFormatter;
19+
}
20+
21+
public OffsetDateTime parseOffsetDateTime(String str) {
22+
try {
23+
return OffsetDateTime.parse(str, offsetDateTimeFormatter);
24+
} catch (DateTimeParseException e) {
25+
throw new RuntimeException(e);
26+
}
27+
}
28+
29+
public String formatOffsetDateTime(OffsetDateTime offsetDateTime) {
30+
return offsetDateTimeFormatter.format(offsetDateTime);
31+
}
32+
}

modules/openapi-generator/src/main/resources/Java/libraries/jersey2/ApiClient.mustache

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@ import java.util.List;
5555
import java.util.Arrays;
5656
import java.util.ArrayList;
5757
import java.util.Date;
58+
{{#java8}}
59+
import java.time.OffsetDateTime;
60+
{{/java8}}
5861

5962
import java.net.URLEncoder;
6063

@@ -77,7 +80,7 @@ import {{invokerPackage}}.auth.OAuth;
7780
{{/hasOAuthMethods}}
7881

7982
{{>generatedAnnotation}}
80-
public class ApiClient {
83+
public class ApiClient{{#java8}} extends JavaTimeFormatter{{/java8}} {
8184
protected Map<String, String> defaultHeaderMap = new HashMap<String, String>();
8285
protected Map<String, String> defaultCookieMap = new HashMap<String, String>();
8386
protected String basePath = "{{{basePath}}}";
@@ -695,7 +698,9 @@ public class ApiClient {
695698
return "";
696699
} else if (param instanceof Date) {
697700
return formatDate((Date) param);
698-
} else if (param instanceof Collection) {
701+
} {{#java8}}else if (param instanceof OffsetDateTime) {
702+
return formatOffsetDateTime((OffsetDateTime) param);
703+
} {{/java8}}else if (param instanceof Collection) {
699704
StringBuilder b = new StringBuilder();
700705
for(Object o : (Collection)param) {
701706
if(b.length() > 0) {

modules/openapi-generator/src/main/resources/Java/libraries/resteasy/ApiClient.mustache

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ import java.util.Map.Entry;
2222
import java.util.TimeZone;
2323
import java.util.regex.Matcher;
2424
import java.util.regex.Pattern;
25+
{{#java8}}
26+
import java.time.OffsetDateTime;
27+
{{/java8}}
2528

2629
import javax.ws.rs.client.Client;
2730
import javax.ws.rs.client.ClientBuilder;
@@ -48,7 +51,7 @@ import {{invokerPackage}}.auth.OAuth;
4851
{{/hasOAuthMethods}}
4952

5053
{{>generatedAnnotation}}
51-
public class ApiClient {
54+
public class ApiClient{{#java8}} extends JavaTimeFormatter{{/java8}} {
5255
private Map<String, String> defaultHeaderMap = new HashMap<String, String>();
5356
private Map<String, String> defaultCookieMap = new HashMap<String, String>();
5457
private String basePath = "{{{basePath}}}";
@@ -333,7 +336,9 @@ public class ApiClient {
333336
return "";
334337
} else if (param instanceof Date) {
335338
return formatDate((Date) param);
336-
} else if (param instanceof Collection) {
339+
} {{#java8}}else if (param instanceof OffsetDateTime) {
340+
return formatOffsetDateTime((OffsetDateTime) param);
341+
} {{/java8}}else if (param instanceof Collection) {
337342
StringBuilder b = new StringBuilder();
338343
for(Object o : (Collection)param) {
339344
if(b.length() > 0) {

modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/ApiClient.mustache

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ import java.util.List;
6464
import java.util.Map;
6565
import java.util.Map.Entry;
6666
import java.util.TimeZone;
67+
{{#java8}}
68+
import java.time.OffsetDateTime;
69+
{{/java8}}
6770

6871
import {{invokerPackage}}.auth.Authentication;
6972
{{#hasHttpBasicMethods}}
@@ -81,7 +84,7 @@ import {{invokerPackage}}.auth.OAuth;
8184

8285
{{>generatedAnnotation}}
8386
@Component("{{invokerPackage}}.ApiClient")
84-
public class ApiClient {
87+
public class ApiClient{{#java8}} extends JavaTimeFormatter{{/java8}} {
8588
public enum CollectionFormat {
8689
CSV(","), TSV("\t"), SSV(" "), PIPES("|"), MULTI(null);
8790
@@ -402,7 +405,9 @@ public class ApiClient {
402405
return "";
403406
} else if (param instanceof Date) {
404407
return formatDate( (Date) param);
405-
} else if (param instanceof Collection) {
408+
} {{#java8}}else if (param instanceof OffsetDateTime) {
409+
return formatOffsetDateTime((OffsetDateTime) param);
410+
} {{/java8}}else if (param instanceof Collection) {
406411
StringBuilder b = new StringBuilder();
407412
for(Object o : (Collection<?>) param) {
408413
if(b.length() > 0) {

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ import io.vertx.ext.web.client.HttpResponse;
3131
import io.vertx.ext.web.client.WebClient;
3232
import io.vertx.ext.web.client.WebClientOptions;
3333

34+
{{#java8}}
35+
import java.time.OffsetDateTime;
36+
{{/java8}}
3437
import java.text.DateFormat;
3538
import java.util.*;
3639
import java.util.function.Consumer;
@@ -40,7 +43,7 @@ import java.util.regex.Pattern;
4043
import static java.util.stream.Collectors.toMap;
4144

4245
{{>generatedAnnotation}}
43-
public class ApiClient {
46+
public class ApiClient{{#java8}} extends JavaTimeFormatter{{/java8}} {
4447
4548
private static final Pattern CONTENT_DISPOSITION_PATTERN = Pattern.compile("filename=['\"]?([^'\"\\s]+)['\"]?");
4649
private static final OpenOptions FILE_DOWNLOAD_OPTIONS = new OpenOptions().setCreate(true).setTruncateExisting(true);
@@ -291,7 +294,9 @@ public class ApiClient {
291294
return "";
292295
} else if (param instanceof Date) {
293296
return formatDate((Date) param);
294-
} else if (param instanceof Collection) {
297+
} {{#java8}}else if (param instanceof OffsetDateTime) {
298+
return formatOffsetDateTime((OffsetDateTime) param);
299+
} {{/java8}}else if (param instanceof Collection) {
295300
StringBuilder b = new StringBuilder();
296301
for (Object o : (Collection) param) {
297302
if (b.length() > 0) {

modules/openapi-generator/src/main/resources/Java/libraries/webclient/ApiClient.mustache

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ import java.util.List;
5757
import java.util.Map;
5858
import java.util.Map.Entry;
5959
import java.util.TimeZone;
60+
{{#java8}}
61+
import java.time.OffsetDateTime;
62+
{{/java8}}
6063

6164
import {{invokerPackage}}.auth.Authentication;
6265
import {{invokerPackage}}.auth.HttpBasicAuth;
@@ -67,7 +70,7 @@ import {{invokerPackage}}.auth.OAuth;
6770
{{/hasOAuthMethods}}
6871

6972
{{>generatedAnnotation}}
70-
public class ApiClient {
73+
public class ApiClient{{#java8}} extends JavaTimeFormatter{{/java8}} {
7174
public enum CollectionFormat {
7275
CSV(","), TSV("\t"), SSV(" "), PIPES("|"), MULTI(null);
7376
@@ -350,7 +353,9 @@ public class ApiClient {
350353
return "";
351354
} else if (param instanceof Date) {
352355
return formatDate( (Date) param);
353-
} else if (param instanceof Collection) {
356+
} {{#java8}}else if (param instanceof OffsetDateTime) {
357+
return formatOffsetDateTime((OffsetDateTime) param);
358+
} {{/java8}}else if (param instanceof Collection) {
354359
StringBuilder b = new StringBuilder();
355360
for(Object o : (Collection<?>) param) {
356361
if(b.length() > 0) {

samples/client/petstore/java/jersey2-java8/.openapi-generator/FILES

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ src/main/java/org/openapitools/client/ApiException.java
7070
src/main/java/org/openapitools/client/ApiResponse.java
7171
src/main/java/org/openapitools/client/Configuration.java
7272
src/main/java/org/openapitools/client/JSON.java
73+
src/main/java/org/openapitools/client/JavaTimeFormatter.java
7374
src/main/java/org/openapitools/client/Pair.java
7475
src/main/java/org/openapitools/client/RFC3339DateFormat.java
7576
src/main/java/org/openapitools/client/ServerConfiguration.java

0 commit comments

Comments
 (0)