Skip to content

Commit 5008de5

Browse files
authored
Merge pull request #3181 from cbornet/retrofit2_java8
[Retrofit] Add support for jsr310 dates to retrofit2 client
2 parents f707675 + 4856407 commit 5008de5

File tree

19 files changed

+154
-73
lines changed

19 files changed

+154
-73
lines changed

bin/java-petstore-retrofit2.sh

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ fi
2626

2727
# if you've executed sbt assembly previously it will use that instead.
2828
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
29-
ags="$@ generate -i modules/swagger-codegen/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml -l java -c bin/java-petstore-retrofit2.json -o samples/client/petstore/java/retrofit2 -DhideGenerationTimestamp=true"
29+
ags="$@ generate -t modules/swagger-codegen/src/main/resources/Java/libraries/retrofit2 -i modules/swagger-codegen/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml -l java -c bin/java-petstore-retrofit2.json -o samples/client/petstore/java/retrofit2 -DhideGenerationTimestamp=true"
3030

31+
echo "Removing files and folders under samples/client/petstore/java/retrofit2/src/main"
32+
rm -rf samples/client/petstore/java/retrofit2/src/main
33+
find samples/client/petstore/java/retrofit2 -maxdepth 1 -type f ! -name "README.md" -exec rm {} +
3134
java $JAVA_OPTS -jar $executable $ags

bin/java-petstore-retrofit2rx.sh

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ fi
2626

2727
# if you've executed sbt assembly previously it will use that instead.
2828
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
29-
ags="$@ generate -i modules/swagger-codegen/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml -l java -c bin/java-petstore-retrofit2rx.json -o samples/client/petstore/java/retrofit2rx -DuseRxJava=true,hideGenerationTimestamp=true"
29+
ags="$@ generate -t modules/swagger-codegen/src/main/resources/Java/libraries/retrofit2 -i modules/swagger-codegen/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml -l java -c bin/java-petstore-retrofit2rx.json -o samples/client/petstore/java/retrofit2rx -DuseRxJava=true,hideGenerationTimestamp=true"
3030

31+
echo "Removing files and folders under samples/client/petstore/java/retrofit2rx/src/main"
32+
rm -rf samples/client/petstore/java/retrofit2rx/src/main
33+
find samples/client/petstore/java/retrofit2rx -maxdepth 1 -type f ! -name "README.md" -exec rm {} +
3134
java $JAVA_OPTS -jar $executable $ags

modules/swagger-codegen/src/main/resources/Java/libraries/retrofit2/ApiClient.mustache

Lines changed: 81 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,17 @@ import java.util.Map;
99

1010
import org.apache.oltu.oauth2.client.request.OAuthClientRequest.AuthenticationRequestBuilder;
1111
import org.apache.oltu.oauth2.client.request.OAuthClientRequest.TokenRequestBuilder;
12+
{{^java8}}
1213
import org.joda.time.DateTime;
1314
import org.joda.time.LocalDate;
1415
import org.joda.time.format.DateTimeFormatter;
1516
import org.joda.time.format.ISODateTimeFormat;
16-
17+
{{/java8}}
18+
{{#java8}}
19+
import java.time.LocalDate;
20+
import java.time.OffsetDateTime;
21+
import java.time.format.DateTimeFormatter;
22+
{{/java8}}
1723
import retrofit2.Converter;
1824
import retrofit2.Retrofit;
1925
{{#useRxJava}}import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;{{/useRxJava}}
@@ -115,7 +121,12 @@ public class ApiClient {
115121
public void createDefaultAdapter() {
116122
Gson gson = new GsonBuilder()
117123
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
124+
{{^java8}}
118125
.registerTypeAdapter(DateTime.class, new DateTimeTypeAdapter())
126+
{{/java8}}
127+
{{#java8}}
128+
.registerTypeAdapter(OffsetDateTime.class, new OffsetDateTimeTypeAdapter())
129+
{{/java8}}
119130
.registerTypeAdapter(LocalDate.class, new LocalDateTypeAdapter())
120131
.create();
121132

@@ -355,7 +366,7 @@ class GsonCustomConverterFactory extends Converter.Factory
355366
}
356367
}
357368

358-
369+
{{^java8}}
359370
/**
360371
* Gson TypeAdapter for Joda DateTime type
361372
*/
@@ -385,6 +396,9 @@ class DateTimeTypeAdapter extends TypeAdapter<DateTime> {
385396
}
386397
}
387398

399+
/**
400+
* Gson TypeAdapter for Joda LocalDate type
401+
*/
388402
class LocalDateTypeAdapter extends TypeAdapter<LocalDate> {
389403
390404
private final DateTimeFormatter formatter = ISODateTimeFormat.date();
@@ -409,4 +423,68 @@ class LocalDateTypeAdapter extends TypeAdapter<LocalDate> {
409423
return formatter.parseLocalDate(date);
410424
}
411425
}
412-
}
426+
}
427+
{{/java8}}
428+
{{#java8}}
429+
/**
430+
* Gson TypeAdapter for jsr310 OffsetDateTime type
431+
*/
432+
class OffsetDateTimeTypeAdapter extends TypeAdapter<OffsetDateTime> {
433+
434+
private final DateTimeFormatter formatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
435+
436+
@Override
437+
public void write(JsonWriter out, OffsetDateTime date) throws IOException {
438+
if (date == null) {
439+
out.nullValue();
440+
} else {
441+
out.value(formatter.format(date));
442+
}
443+
}
444+
445+
@Override
446+
public OffsetDateTime read(JsonReader in) throws IOException {
447+
switch (in.peek()) {
448+
case NULL:
449+
in.nextNull();
450+
return null;
451+
default:
452+
String date = in.nextString();
453+
if (date.endsWith("+0000")) {
454+
date = date.substring(0, date.length()-5) + "Z";
455+
}
456+
457+
return OffsetDateTime.parse(date, formatter);
458+
}
459+
}
460+
}
461+
462+
/**
463+
* Gson TypeAdapter for jsr310 LocalDate type
464+
*/
465+
class LocalDateTypeAdapter extends TypeAdapter<LocalDate> {
466+
467+
private final DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE;
468+
469+
@Override
470+
public void write(JsonWriter out, LocalDate date) throws IOException {
471+
if (date == null) {
472+
out.nullValue();
473+
} else {
474+
out.value(formatter.format(date));
475+
}
476+
}
477+
478+
@Override
479+
public LocalDate read(JsonReader in) throws IOException {
480+
switch (in.peek()) {
481+
case NULL:
482+
in.nextNull();
483+
return null;
484+
default:
485+
String date = in.nextString();
486+
return LocalDate.parse(date, formatter);
487+
}
488+
}
489+
}
490+
{{/java8}}

modules/swagger-codegen/src/main/resources/Java/libraries/retrofit2/build.gradle.mustache

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ if(hasProperty('target') && target == 'android') {
7878
apply plugin: 'java'
7979
apply plugin: 'maven'
8080
81-
sourceCompatibility = JavaVersion.VERSION_1_7
82-
targetCompatibility = JavaVersion.VERSION_1_7
81+
sourceCompatibility = JavaVersion.VERSION_{{^java8}}1_7{{/java8}}{{#java8}}1_8{{/java8}}
82+
targetCompatibility = JavaVersion.VERSION_{{^java8}}1_7{{/java8}}{{#java8}}1_8{{/java8}}
8383

8484
install {
8585
repositories.mavenInstaller {
@@ -97,20 +97,28 @@ ext {
9797
oltu_version = "1.0.1"
9898
retrofit_version = "2.0.2"
9999
swagger_annotations_version = "1.5.8"
100-
junit_version = "4.12"{{#useRxJava}}
101-
rx_java_version = "1.1.3"{{/useRxJava}}
100+
junit_version = "4.12"
101+
{{#useRxJava}}
102+
rx_java_version = "1.1.3"
103+
{{/useRxJava}}
104+
{{^java8}}
102105
jodatime_version = "2.9.3"
106+
{{/java8}}
103107
}
104108

105109
dependencies {
106110
compile "com.squareup.retrofit2:retrofit:$retrofit_version"
107111
compile "com.squareup.retrofit2:converter-scalars:$retrofit_version"
108-
compile "com.squareup.retrofit2:converter-gson:$retrofit_version"{{#useRxJava}}
112+
compile "com.squareup.retrofit2:converter-gson:$retrofit_version"
113+
{{#useRxJava}}
109114
compile "com.squareup.retrofit2:adapter-rxjava:$retrofit_version"
110-
compile "io.reactivex:rxjava:$rx_java_version"{{/useRxJava}}
115+
compile "io.reactivex:rxjava:$rx_java_version"
116+
{{/useRxJava}}
111117
compile "io.swagger:swagger-annotations:$swagger_annotations_version"
112118
compile "org.apache.oltu.oauth2:org.apache.oltu.oauth2.client:$oltu_version"
119+
{{^java8}}
113120
compile "joda-time:joda-time:$jodatime_version"
121+
{{/java8}}
114122

115123
testCompile "junit:junit:$junit_version"
116124
}

modules/swagger-codegen/src/main/resources/Java/libraries/retrofit2/build.sbt.mustache

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,16 @@ lazy val root = (project in file(".")).
1111
libraryDependencies ++= Seq(
1212
"com.squareup.retrofit2" % "retrofit" % "2.0.2" % "compile",
1313
"com.squareup.retrofit2" % "converter-scalars" % "2.0.2" % "compile",
14-
"com.squareup.retrofit2" % "converter-gson" % "2.0.2" % "compile",{{#useRxJava}}
14+
"com.squareup.retrofit2" % "converter-gson" % "2.0.2" % "compile",
15+
{{#useRxJava}}
1516
"com.squareup.retrofit2" % "adapter-rxjava" % "2.0.2" % "compile",
16-
"io.reactivex" % "rxjava" % "1.1.3" % "compile",{{/useRxJava}}
17+
"io.reactivex" % "rxjava" % "1.1.3" % "compile",
18+
{{/useRxJava}}
1719
"io.swagger" % "swagger-annotations" % "1.5.8" % "compile",
1820
"org.apache.oltu.oauth2" % "org.apache.oltu.oauth2.client" % "1.0.1" % "compile",
21+
{{^java8}}
1922
"joda-time" % "joda-time" % "2.9.3" % "compile",
23+
{{/java8}}
2024
"junit" % "junit" % "4.12" % "test",
2125
"com.novocode" % "junit-interface" % "0.10" % "test"
2226
)

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

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -95,15 +95,6 @@
9595
</execution>
9696
</executions>
9797
</plugin>
98-
<plugin>
99-
<groupId>org.apache.maven.plugins</groupId>
100-
<artifactId>maven-compiler-plugin</artifactId>
101-
<version>2.3.2</version>
102-
<configuration>
103-
<source>1.7</source>
104-
<target>1.7</target>
105-
</configuration>
106-
</plugin>
10798
</plugins>
10899
</build>
109100
<dependencies>
@@ -132,11 +123,14 @@
132123
<artifactId>org.apache.oltu.oauth2.client</artifactId>
133124
<version>${oltu-version}</version>
134125
</dependency>
126+
{{^java8}}
135127
<dependency>
136128
<groupId>joda-time</groupId>
137129
<artifactId>joda-time</artifactId>
138130
<version>${jodatime-version}</version>
139-
</dependency>{{#useRxJava}}
131+
</dependency>
132+
{{/java8}}
133+
{{#useRxJava}}
140134
<dependency>
141135
<groupId>io.reactivex</groupId>
142136
<artifactId>rxjava</artifactId>
@@ -146,7 +140,8 @@
146140
<groupId>com.squareup.retrofit2</groupId>
147141
<artifactId>adapter-rxjava</artifactId>
148142
<version>${retrofit-version}</version>
149-
</dependency>{{/useRxJava}}
143+
</dependency>
144+
{{/useRxJava}}
150145

151146
<!-- test dependencies -->
152147
<dependency>
@@ -157,10 +152,17 @@
157152
</dependency>
158153
</dependencies>
159154
<properties>
155+
<java.version>{{#java8}}1.8{{/java8}}{{^java8}}1.7{{/java8}}</java.version>
156+
<maven.compiler.source>${java.version}</maven.compiler.source>
157+
<maven.compiler.target>${java.version}</maven.compiler.target>
160158
<swagger-core-version>1.5.8</swagger-core-version>
161-
<retrofit-version>2.0.2</retrofit-version>{{#useRxJava}}
162-
<rxjava-version>1.1.3</rxjava-version>{{/useRxJava}}
159+
<retrofit-version>2.0.2</retrofit-version>
160+
{{#useRxJava}}
161+
<rxjava-version>1.1.3</rxjava-version>
162+
{{/useRxJava}}
163+
{{^java8}}
163164
<jodatime-version>2.9.3</jodatime-version>
165+
{{/java8}}
164166
<oltu-version>1.0.1</oltu-version>
165167
<maven-plugin-version>1.0.0</maven-plugin-version>
166168
<junit-version>4.12</junit-version>

samples/client/petstore/java/retrofit2/.swagger-codegen-ignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
1616
#foo/**/qux
17-
# Thsi matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
17+
# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
1818

1919
# You can also negate patterns with an exclamation (!).
2020
# For example, you can ignore all files in a docs folder with the file extension .md:

samples/client/petstore/java/retrofit2/pom.xml

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -95,15 +95,6 @@
9595
</execution>
9696
</executions>
9797
</plugin>
98-
<plugin>
99-
<groupId>org.apache.maven.plugins</groupId>
100-
<artifactId>maven-compiler-plugin</artifactId>
101-
<version>2.3.2</version>
102-
<configuration>
103-
<source>1.7</source>
104-
<target>1.7</target>
105-
</configuration>
106-
</plugin>
10798
</plugins>
10899
</build>
109100
<dependencies>
@@ -147,6 +138,9 @@
147138
</dependency>
148139
</dependencies>
149140
<properties>
141+
<java.version>1.7</java.version>
142+
<maven.compiler.source>${java.version}</maven.compiler.source>
143+
<maven.compiler.target>${java.version}</maven.compiler.target>
150144
<swagger-core-version>1.5.8</swagger-core-version>
151145
<retrofit-version>2.0.2</retrofit-version>
152146
<jodatime-version>2.9.3</jodatime-version>

samples/client/petstore/java/retrofit2/src/main/java/io/swagger/client/ApiClient.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import org.joda.time.LocalDate;
1414
import org.joda.time.format.DateTimeFormatter;
1515
import org.joda.time.format.ISODateTimeFormat;
16-
1716
import retrofit2.Converter;
1817
import retrofit2.Retrofit;
1918

@@ -54,10 +53,10 @@ public ApiClient(String[] authNames) {
5453
this();
5554
for(String authName : authNames) {
5655
Interceptor auth;
57-
if (authName == "api_key") {
58-
auth = new ApiKeyAuth("header", "api_key");
59-
} else if (authName == "petstore_auth") {
56+
if (authName == "petstore_auth") {
6057
auth = new OAuth(OAuthFlow.implicit, "http://petstore.swagger.io/api/oauth/dialog", "", "write:pets, read:pets");
58+
} else if (authName == "api_key") {
59+
auth = new ApiKeyAuth("header", "api_key");
6160
} else {
6261
throw new RuntimeException("auth name \"" + authName + "\" not found in available auth names");
6362
}
@@ -354,7 +353,6 @@ public Converter<?, RequestBody> requestBodyConverter(Type type, Annotation[] pa
354353
}
355354
}
356355

357-
358356
/**
359357
* Gson TypeAdapter for Joda DateTime type
360358
*/
@@ -384,6 +382,9 @@ public DateTime read(JsonReader in) throws IOException {
384382
}
385383
}
386384

385+
/**
386+
* Gson TypeAdapter for Joda LocalDate type
387+
*/
387388
class LocalDateTypeAdapter extends TypeAdapter<LocalDate> {
388389

389390
private final DateTimeFormatter formatter = ISODateTimeFormat.date();
@@ -408,4 +409,4 @@ public LocalDate read(JsonReader in) throws IOException {
408409
return formatter.parseLocalDate(date);
409410
}
410411
}
411-
}
412+
}

samples/client/petstore/java/retrofit2/src/main/java/io/swagger/client/api/FakeApi.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
import okhttp3.RequestBody;
1010

1111
import org.joda.time.LocalDate;
12-
import org.joda.time.DateTime;
1312
import java.math.BigDecimal;
13+
import org.joda.time.DateTime;
1414

1515
import java.util.ArrayList;
1616
import java.util.HashMap;

0 commit comments

Comments
 (0)