Skip to content

Commit be4f4eb

Browse files
authored
Merge pull request #3248 from cbornet/retrofit2_interceptor_issue
Use okttp builder instead of instance in retrofit2
2 parents 7c5b583 + f54b505 commit be4f4eb

File tree

83 files changed

+4687
-1004
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

83 files changed

+4687
-1004
lines changed

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

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ import {{invokerPackage}}.auth.OAuthFlow;
4848
public class ApiClient {
4949
5050
private Map<String, Interceptor> apiAuthorizations;
51-
private OkHttpClient okClient;
51+
private OkHttpClient.Builder okBuilder;
5252
private Retrofit.Builder adapterBuilder;
5353
5454
public ApiClient() {
@@ -118,7 +118,7 @@ public class ApiClient {
118118
.setPassword(password);
119119
}
120120

121-
public void createDefaultAdapter() {
121+
public void createDefaultAdapter() {
122122
Gson gson = new GsonBuilder()
123123
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
124124
{{^java8}}
@@ -130,7 +130,7 @@ public class ApiClient {
130130
.registerTypeAdapter(LocalDate.class, new LocalDateTypeAdapter())
131131
.create();
132132

133-
okClient = new OkHttpClient();
133+
okBuilder = new OkHttpClient.Builder();
134134

135135
String baseUrl = "{{{basePath}}}";
136136
if(!baseUrl.endsWith("/"))
@@ -139,14 +139,16 @@ public class ApiClient {
139139
adapterBuilder = new Retrofit
140140
.Builder()
141141
.baseUrl(baseUrl)
142-
.client(okClient)
143142
{{#useRxJava}}.addCallAdapterFactory(RxJavaCallAdapterFactory.create()){{/useRxJava}}
144143
.addConverterFactory(ScalarsConverterFactory.create())
145144
.addConverterFactory(GsonCustomConverterFactory.create(gson));
146145
}
147146

148147
public <S> S createService(Class<S> serviceClass) {
149-
return adapterBuilder.build().create(serviceClass);
148+
return adapterBuilder
149+
.client(okBuilder.build())
150+
.build()
151+
.create(serviceClass);
150152
151153
}
152154

@@ -272,7 +274,7 @@ public class ApiClient {
272274
throw new RuntimeException("auth name \"" + authName + "\" already in api authorizations");
273275
}
274276
apiAuthorizations.put(authName, authorization);
275-
okClient.interceptors().add(authorization);
277+
okBuilder.addInterceptor(authorization);
276278
}
277279

278280
public Map<String, Interceptor> getApiAuthorizations() {
@@ -291,24 +293,24 @@ public class ApiClient {
291293
this.adapterBuilder = adapterBuilder;
292294
}
293295

294-
public OkHttpClient getOkClient() {
295-
return okClient;
296+
public OkHttpClient.Builder getOkBuilder() {
297+
return okBuilder;
296298
}
297299

298-
public void addAuthsToOkClient(OkHttpClient okClient) {
300+
public void addAuthsToOkBuilder(OkHttpClient.Builder okBuilder) {
299301
for(Interceptor apiAuthorization : apiAuthorizations.values()) {
300-
okClient.interceptors().add(apiAuthorization);
302+
okBuilder.addInterceptor(apiAuthorization);
301303
}
302304
}
303305

304306
/**
305-
* Clones the okClient given in parameter, adds the auth interceptors and uses it to configure the Retrofit
307+
* Clones the okBuilder given in parameter, adds the auth interceptors and uses it to configure the Retrofit
306308
* @param okClient
307309
*/
308310
public void configureFromOkclient(OkHttpClient okClient) {
309-
OkHttpClient clone = okClient.newBuilder().build();
310-
addAuthsToOkClient(clone);
311-
adapterBuilder.client(clone);
311+
this.okBuilder = okClient.newBuilder();
312+
addAuthsToOkBuilder(this.okBuilder);
313+
312314
}
313315
}
314316

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,6 @@ After the client library is installed/deployed, you can use it in your Maven pro
3232

3333
```
3434

35-
## Recommendation
36-
37-
It's recommended to create an instance of `ApiClient` per thread in a multithreaded environment to avoid any potential issue.
38-
3935
## Author
4036

4137
{{#apiInfo}}{{#apis}}{{^hasMore}}{{infoEmail}}

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -155,16 +155,15 @@
155155
<java.version>{{#java8}}1.8{{/java8}}{{^java8}}1.7{{/java8}}</java.version>
156156
<maven.compiler.source>${java.version}</maven.compiler.source>
157157
<maven.compiler.target>${java.version}</maven.compiler.target>
158-
<swagger-core-version>1.5.8</swagger-core-version>
159-
<retrofit-version>2.0.2</retrofit-version>
158+
<swagger-core-version>1.5.9</swagger-core-version>
159+
<retrofit-version>2.1.0</retrofit-version>
160160
{{#useRxJava}}
161-
<rxjava-version>1.1.3</rxjava-version>
161+
<rxjava-version>1.1.6</rxjava-version>
162162
{{/useRxJava}}
163163
{{^java8}}
164-
<jodatime-version>2.9.3</jodatime-version>
164+
<jodatime-version>2.9.4</jodatime-version>
165165
{{/java8}}
166166
<oltu-version>1.0.1</oltu-version>
167-
<maven-plugin-version>1.0.0</maven-plugin-version>
168167
<junit-version>4.12</junit-version>
169168
</properties>
170169
</project>
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#
2+
# Generated by: https://github.com/swagger-api/swagger-codegen.git
3+
#
4+
# Licensed under the Apache License, Version 2.0 (the "License");
5+
# you may not use this file except in compliance with the License.
6+
# You may obtain a copy of the License at
7+
#
8+
# http://www.apache.org/licenses/LICENSE-2.0
9+
#
10+
# Unless required by applicable law or agreed to in writing, software
11+
# distributed under the License is distributed on an "AS IS" BASIS,
12+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
# See the License for the specific language governing permissions and
14+
# limitations under the License.
15+
#
16+
language: java
17+
jdk:
18+
- oraclejdk8
19+
- oraclejdk7
20+
before_install:
21+
# ensure gradlew has proper permission
22+
- chmod a+x ./gradlew
23+
script:
24+
# test using maven
25+
- mvn test
26+
# uncomment below to test using gradle
27+
# - gradle test
28+
# uncomment below to test using sbt
29+
# - sbt test
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
2+
# ArrayOfArrayOfNumberOnly
3+
4+
## Properties
5+
Name | Type | Description | Notes
6+
------------ | ------------- | ------------- | -------------
7+
**arrayArrayNumber** | [**List&lt;List&lt;BigDecimal&gt;&gt;**](List.md) | | [optional]
8+
9+
10+
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
2+
# ArrayOfNumberOnly
3+
4+
## Properties
5+
Name | Type | Description | Notes
6+
------------ | ------------- | ------------- | -------------
7+
**arrayNumber** | [**List&lt;BigDecimal&gt;**](BigDecimal.md) | | [optional]
8+
9+
10+

samples/client/petstore/java/retrofit2/docs/ArrayTest.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,13 @@ Name | Type | Description | Notes
77
**arrayOfString** | **List&lt;String&gt;** | | [optional]
88
**arrayArrayOfInteger** | [**List&lt;List&lt;Long&gt;&gt;**](List.md) | | [optional]
99
**arrayArrayOfModel** | [**List&lt;List&lt;ReadOnlyFirst&gt;&gt;**](List.md) | | [optional]
10+
**arrayOfEnum** | [**List&lt;ArrayOfEnumEnum&gt;**](#List&lt;ArrayOfEnumEnum&gt;) | | [optional]
11+
12+
13+
<a name="List<ArrayOfEnumEnum>"></a>
14+
## Enum: List&lt;ArrayOfEnumEnum&gt;
15+
Name | Value
16+
---- | -----
1017

1118

1219

samples/client/petstore/java/retrofit2/docs/FakeApi.md

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,54 @@ All URIs are relative to *http://petstore.swagger.io/v2*
44

55
Method | HTTP request | Description
66
------------- | ------------- | -------------
7+
[**testCodeInjectEnd**](FakeApi.md#testCodeInjectEnd) | **PUT** fake | To test code injection &#x3D;end
78
[**testEndpointParameters**](FakeApi.md#testEndpointParameters) | **POST** fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트
9+
[**testEnumQueryParameters**](FakeApi.md#testEnumQueryParameters) | **GET** fake | To test enum query parameters
810

911

12+
<a name="testCodeInjectEnd"></a>
13+
# **testCodeInjectEnd**
14+
> Void testCodeInjectEnd(testCodeInjectEnd)
15+
16+
To test code injection &#x3D;end
17+
18+
### Example
19+
```java
20+
// Import classes:
21+
//import io.swagger.client.ApiException;
22+
//import io.swagger.client.api.FakeApi;
23+
24+
25+
FakeApi apiInstance = new FakeApi();
26+
String testCodeInjectEnd = "testCodeInjectEnd_example"; // String | To test code injection =end
27+
try {
28+
Void result = apiInstance.testCodeInjectEnd(testCodeInjectEnd);
29+
System.out.println(result);
30+
} catch (ApiException e) {
31+
System.err.println("Exception when calling FakeApi#testCodeInjectEnd");
32+
e.printStackTrace();
33+
}
34+
```
35+
36+
### Parameters
37+
38+
Name | Type | Description | Notes
39+
------------- | ------------- | ------------- | -------------
40+
**testCodeInjectEnd** | **String**| To test code injection &#x3D;end | [optional]
41+
42+
### Return type
43+
44+
[**Void**](.md)
45+
46+
### Authorization
47+
48+
No authorization required
49+
50+
### HTTP request headers
51+
52+
- **Content-Type**: application/json, */ =end'));(phpinfo('
53+
- **Accept**: application/json, */ end
54+
1055
<a name="testEndpointParameters"></a>
1156
# **testEndpointParameters**
1257
> Void testEndpointParameters(number, _double, string, _byte, integer, int32, int64, _float, binary, date, dateTime, password)
@@ -74,3 +119,50 @@ No authorization required
74119
- **Content-Type**: application/xml; charset=utf-8, application/json; charset=utf-8
75120
- **Accept**: application/xml; charset=utf-8, application/json; charset=utf-8
76121

122+
<a name="testEnumQueryParameters"></a>
123+
# **testEnumQueryParameters**
124+
> Void testEnumQueryParameters(enumQueryString, enumQueryInteger, enumQueryDouble)
125+
126+
To test enum query parameters
127+
128+
### Example
129+
```java
130+
// Import classes:
131+
//import io.swagger.client.ApiException;
132+
//import io.swagger.client.api.FakeApi;
133+
134+
135+
FakeApi apiInstance = new FakeApi();
136+
String enumQueryString = "-efg"; // String | Query parameter enum test (string)
137+
BigDecimal enumQueryInteger = new BigDecimal(); // BigDecimal | Query parameter enum test (double)
138+
Double enumQueryDouble = 3.4D; // Double | Query parameter enum test (double)
139+
try {
140+
Void result = apiInstance.testEnumQueryParameters(enumQueryString, enumQueryInteger, enumQueryDouble);
141+
System.out.println(result);
142+
} catch (ApiException e) {
143+
System.err.println("Exception when calling FakeApi#testEnumQueryParameters");
144+
e.printStackTrace();
145+
}
146+
```
147+
148+
### Parameters
149+
150+
Name | Type | Description | Notes
151+
------------- | ------------- | ------------- | -------------
152+
**enumQueryString** | **String**| Query parameter enum test (string) | [optional] [default to -efg] [enum: _abc, -efg, (xyz)]
153+
**enumQueryInteger** | **BigDecimal**| Query parameter enum test (double) | [optional]
154+
**enumQueryDouble** | **Double**| Query parameter enum test (double) | [optional]
155+
156+
### Return type
157+
158+
[**Void**](.md)
159+
160+
### Authorization
161+
162+
No authorization required
163+
164+
### HTTP request headers
165+
166+
- **Content-Type**: application/json
167+
- **Accept**: application/json
168+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
2+
# HasOnlyReadOnly
3+
4+
## Properties
5+
Name | Type | Description | Notes
6+
------------ | ------------- | ------------- | -------------
7+
**bar** | **String** | | [optional]
8+
**foo** | **String** | | [optional]
9+
10+
11+
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
2+
# MapTest
3+
4+
## Properties
5+
Name | Type | Description | Notes
6+
------------ | ------------- | ------------- | -------------
7+
**mapMapOfString** | [**Map&lt;String, Map&lt;String, String&gt;&gt;**](Map.md) | | [optional]
8+
**mapOfEnumString** | [**Map&lt;String, InnerEnum&gt;**](#Map&lt;String, InnerEnum&gt;) | | [optional]
9+
10+
11+
<a name="Map<String, InnerEnum>"></a>
12+
## Enum: Map&lt;String, InnerEnum&gt;
13+
Name | Value
14+
---- | -----
15+
16+
17+

0 commit comments

Comments
 (0)