Merge pull request #3248 from cbornet/retrofit2_interceptor_issue

Use okttp builder instead of instance in retrofit2
This commit is contained in:
wing328
2016-06-30 16:45:17 +08:00
committed by GitHub
83 changed files with 4687 additions and 1004 deletions

View File

@@ -48,7 +48,7 @@ import {{invokerPackage}}.auth.OAuthFlow;
public class ApiClient {
private Map<String, Interceptor> apiAuthorizations;
private OkHttpClient okClient;
private OkHttpClient.Builder okBuilder;
private Retrofit.Builder adapterBuilder;
public ApiClient() {
@@ -118,7 +118,7 @@ public class ApiClient {
.setPassword(password);
}
public void createDefaultAdapter() {
public void createDefaultAdapter() {
Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
{{^java8}}
@@ -130,7 +130,7 @@ public class ApiClient {
.registerTypeAdapter(LocalDate.class, new LocalDateTypeAdapter())
.create();
okClient = new OkHttpClient();
okBuilder = new OkHttpClient.Builder();
String baseUrl = "{{{basePath}}}";
if(!baseUrl.endsWith("/"))
@@ -139,14 +139,16 @@ public class ApiClient {
adapterBuilder = new Retrofit
.Builder()
.baseUrl(baseUrl)
.client(okClient)
{{#useRxJava}}.addCallAdapterFactory(RxJavaCallAdapterFactory.create()){{/useRxJava}}
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonCustomConverterFactory.create(gson));
}
public <S> S createService(Class<S> serviceClass) {
return adapterBuilder.build().create(serviceClass);
return adapterBuilder
.client(okBuilder.build())
.build()
.create(serviceClass);
}
@@ -272,7 +274,7 @@ public class ApiClient {
throw new RuntimeException("auth name \"" + authName + "\" already in api authorizations");
}
apiAuthorizations.put(authName, authorization);
okClient.interceptors().add(authorization);
okBuilder.addInterceptor(authorization);
}
public Map<String, Interceptor> getApiAuthorizations() {
@@ -291,24 +293,24 @@ public class ApiClient {
this.adapterBuilder = adapterBuilder;
}
public OkHttpClient getOkClient() {
return okClient;
public OkHttpClient.Builder getOkBuilder() {
return okBuilder;
}
public void addAuthsToOkClient(OkHttpClient okClient) {
public void addAuthsToOkBuilder(OkHttpClient.Builder okBuilder) {
for(Interceptor apiAuthorization : apiAuthorizations.values()) {
okClient.interceptors().add(apiAuthorization);
okBuilder.addInterceptor(apiAuthorization);
}
}
/**
* Clones the okClient given in parameter, adds the auth interceptors and uses it to configure the Retrofit
* Clones the okBuilder given in parameter, adds the auth interceptors and uses it to configure the Retrofit
* @param okClient
*/
public void configureFromOkclient(OkHttpClient okClient) {
OkHttpClient clone = okClient.newBuilder().build();
addAuthsToOkClient(clone);
adapterBuilder.client(clone);
this.okBuilder = okClient.newBuilder();
addAuthsToOkBuilder(this.okBuilder);
}
}

View File

@@ -32,10 +32,6 @@ After the client library is installed/deployed, you can use it in your Maven pro
```
## Recommendation
It's recommended to create an instance of `ApiClient` per thread in a multithreaded environment to avoid any potential issue.
## Author
{{#apiInfo}}{{#apis}}{{^hasMore}}{{infoEmail}}

View File

@@ -155,16 +155,15 @@
<java.version>{{#java8}}1.8{{/java8}}{{^java8}}1.7{{/java8}}</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<swagger-core-version>1.5.8</swagger-core-version>
<retrofit-version>2.0.2</retrofit-version>
<swagger-core-version>1.5.9</swagger-core-version>
<retrofit-version>2.1.0</retrofit-version>
{{#useRxJava}}
<rxjava-version>1.1.3</rxjava-version>
<rxjava-version>1.1.6</rxjava-version>
{{/useRxJava}}
{{^java8}}
<jodatime-version>2.9.3</jodatime-version>
<jodatime-version>2.9.4</jodatime-version>
{{/java8}}
<oltu-version>1.0.1</oltu-version>
<maven-plugin-version>1.0.0</maven-plugin-version>
<junit-version>4.12</junit-version>
</properties>
</project>