From f5265853ba56a8017c74bb08ea25dd4d0b3ac66e Mon Sep 17 00:00:00 2001 From: Timo Rohrberg Date: Thu, 13 Feb 2020 14:55:10 +0100 Subject: [PATCH] [Java][okhttp-gson] Use builder api of OkHttpClient to avoid UnsupportedOperationEx (#5177) * 3432 Use builder api of OkHttpClient to avoid UnsupportedOperationEx The reason for the UnsupportedOperationException was an invalid access to the interceptors list of OkHttpClient. That list is unmodifiable as stated by the JavaDoc. Instead accessing the list directly, the interceptors should always be passed when building the client by the builder api. * 3432 Use builder api of OkHttpClient to avoid UnsupportedOperationEx The reason for the UnsupportedOperationException was an invalid access to the interceptors list of OkHttpClient. That list is unmodifiable as stated by the JavaDoc. Instead accessing the list directly, the interceptors should always be passed when building the client by the builder api. * 3432 Follow-up fix to make samples compile again * 3432 Updated sample implementation for okHttp-Gson-ParcelableModel --- .../libraries/okhttp-gson/ApiClient.mustache | 22 ++++++++++++++----- .../org/openapitools/client/ApiClient.java | 16 +++++++++++--- .../org/openapitools/client/ApiClient.java | 16 +++++++++++--- 3 files changed, 42 insertions(+), 12 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/okhttp-gson/ApiClient.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/okhttp-gson/ApiClient.mustache index 3856ddf8c19..1d3511364ca 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/okhttp-gson/ApiClient.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/okhttp-gson/ApiClient.mustache @@ -90,6 +90,7 @@ public class ApiClient { */ public ApiClient() { init(); + initHttpClient(); // Setup authentications (key: authentication name, value: authentication).{{#authMethods}}{{#isBasic}}{{#isBasicBasic}} authentications.put("{{name}}", new HttpBasicAuth());{{/isBasicBasic}}{{^isBasicBasic}} @@ -129,7 +130,7 @@ public class ApiClient { "{{name}}", retryingOAuth ); - httpClient.interceptors().add(retryingOAuth); + initHttpClient(Collections.singletonList(retryingOAuth)); {{/hasOAuthMethods}} // Prevent the authentications from being modified. @@ -139,16 +140,25 @@ public class ApiClient { {{/-first}} {{/oauthMethods}} {{/hasOAuthMethods}} - private void init() { + private void initHttpClient() { + initHttpClient(Collections.emptyList()); + } + + private void initHttpClient(List interceptors) { OkHttpClient.Builder builder = new OkHttpClient.Builder(); builder.addNetworkInterceptor(getProgressInterceptor()); - httpClient = builder.build(); - + for (Interceptor interceptor: interceptors) { + builder.addInterceptor(interceptor); + } {{#useGzipFeature}} - // Enable gzip request compression - httpClient.interceptors().add(new GzipRequestInterceptor()); + // Enable gzip request compression + builder.addInterceptor(new GzipRequestInterceptor()); {{/useGzipFeature}} + httpClient = builder.build(); + } + + private void init() { verifyingSsl = true; json = new JSON(); diff --git a/samples/client/petstore/java/okhttp-gson-parcelableModel/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/okhttp-gson-parcelableModel/src/main/java/org/openapitools/client/ApiClient.java index 843e662b781..a83ae60c043 100644 --- a/samples/client/petstore/java/okhttp-gson-parcelableModel/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/petstore/java/okhttp-gson-parcelableModel/src/main/java/org/openapitools/client/ApiClient.java @@ -85,6 +85,7 @@ public class ApiClient { */ public ApiClient() { init(); + initHttpClient(); // Setup authentications (key: authentication name, value: authentication). authentications.put("api_key", new ApiKeyAuth("header", "api_key")); @@ -120,18 +121,27 @@ public class ApiClient { "petstore_auth", retryingOAuth ); - httpClient.interceptors().add(retryingOAuth); + initHttpClient(Collections.singletonList(retryingOAuth)); // Prevent the authentications from being modified. authentications = Collections.unmodifiableMap(authentications); } - private void init() { + private void initHttpClient() { + initHttpClient(Collections.emptyList()); + } + + private void initHttpClient(List interceptors) { OkHttpClient.Builder builder = new OkHttpClient.Builder(); builder.addNetworkInterceptor(getProgressInterceptor()); + for (Interceptor interceptor: interceptors) { + builder.addInterceptor(interceptor); + } + httpClient = builder.build(); + } - + private void init() { verifyingSsl = true; json = new JSON(); diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/okhttp-gson/src/main/java/org/openapitools/client/ApiClient.java index 843e662b781..a83ae60c043 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/org/openapitools/client/ApiClient.java @@ -85,6 +85,7 @@ public class ApiClient { */ public ApiClient() { init(); + initHttpClient(); // Setup authentications (key: authentication name, value: authentication). authentications.put("api_key", new ApiKeyAuth("header", "api_key")); @@ -120,18 +121,27 @@ public class ApiClient { "petstore_auth", retryingOAuth ); - httpClient.interceptors().add(retryingOAuth); + initHttpClient(Collections.singletonList(retryingOAuth)); // Prevent the authentications from being modified. authentications = Collections.unmodifiableMap(authentications); } - private void init() { + private void initHttpClient() { + initHttpClient(Collections.emptyList()); + } + + private void initHttpClient(List interceptors) { OkHttpClient.Builder builder = new OkHttpClient.Builder(); builder.addNetworkInterceptor(getProgressInterceptor()); + for (Interceptor interceptor: interceptors) { + builder.addInterceptor(interceptor); + } + httpClient = builder.build(); + } - + private void init() { verifyingSsl = true; json = new JSON();