From 398d6cd8d3df7f9902bc73140195fce85ea406ad Mon Sep 17 00:00:00 2001 From: gaetPax Date: Thu, 26 Mar 2020 11:09:20 +0100 Subject: [PATCH 1/3] [Java][Feign] added 'feignHttpClient' configOption and support for apache feign httpClient (#5709) --- .../codegen/languages/JavaClientCodegen.java | 21 ++++++++++++++++++- .../Java/libraries/feign/ApiClient.mustache | 6 ++++++ .../libraries/feign/build.gradle.mustache | 6 ++++++ .../Java/libraries/feign/build.sbt.mustache | 3 +++ .../Java/libraries/feign/pom.mustache | 10 +++++++++ 5 files changed, 45 insertions(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java index 07ece9aaea0c..5064121361c1 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java @@ -55,6 +55,10 @@ public class JavaClientCodegen extends AbstractJavaCodegen public static final String USE_PLAY_WS = "usePlayWS"; public static final String PLAY_VERSION = "playVersion"; public static final String FEIGN_VERSION = "feignVersion"; + public static final String FEIGN_HTTP_CLIENT = "feignHttpClient"; + public static final String FEIGN_DEFAULT_HTTP_CLIENT = "default"; + public static final String FEIGN_APACHE_HTTP_CLIENT = "apacheHttpClient"; + public static final String[] FEIGN_SUPPORTED_HTTP_CLIENTS = new String[]{FEIGN_DEFAULT_HTTP_CLIENT, FEIGN_APACHE_HTTP_CLIENT}; public static final String PARCELABLE_MODEL = "parcelableModel"; public static final String USE_RUNTIME_EXCEPTION = "useRuntimeException"; public static final String USE_REFLECTION_EQUALS_HASHCODE = "useReflectionEqualsHashCode"; @@ -94,6 +98,7 @@ public class JavaClientCodegen extends AbstractJavaCodegen protected boolean usePlayWS = false; protected String playVersion = PLAY_25; protected String feignVersion = FEIGN_10; + protected String feignHttpClient = FEIGN_DEFAULT_HTTP_CLIENT; protected boolean parcelableModel = false; protected boolean useBeanValidation = false; protected boolean performBeanValidation = false; @@ -139,6 +144,7 @@ public JavaClientCodegen() { cliOptions.add(CliOption.newBoolean(USE_GZIP_FEATURE, "Send gzip-encoded requests")); cliOptions.add(CliOption.newBoolean(USE_RUNTIME_EXCEPTION, "Use RuntimeException instead of Exception")); cliOptions.add(CliOption.newBoolean(FEIGN_VERSION, "Version of OpenFeign: '10.x' (default), '9.x' (deprecated)")); + cliOptions.add(CliOption.newBoolean(FEIGN_HTTP_CLIENT, "Use an alternative httpClient module in the FeignClient: " + Arrays.toString(FEIGN_SUPPORTED_HTTP_CLIENTS))); cliOptions.add(CliOption.newBoolean(USE_REFLECTION_EQUALS_HASHCODE, "Use org.apache.commons.lang3.builder for equals and hashCode in the models. WARNING: This will fail under a security manager, unless the appropriate permissions are set up correctly and also there's potential performance impact.")); cliOptions.add(CliOption.newBoolean(CASE_INSENSITIVE_RESPONSE_HEADERS, "Make API response's headers case-insensitive. Available on " + OKHTTP_GSON + ", " + JERSEY2 + " libraries")); @@ -229,7 +235,7 @@ public void processOpts() { } additionalProperties.put(PLAY_VERSION, playVersion); - // OpenFeign + // OpenFeign version if (additionalProperties.containsKey(FEIGN_VERSION)) { this.setFeignVersion(additionalProperties.get(FEIGN_VERSION).toString()); @@ -247,6 +253,15 @@ public void processOpts() { } additionalProperties.put(FEIGN_VERSION, feignVersion); + // OpenFeign httpClient + if (additionalProperties.containsKey(FEIGN_HTTP_CLIENT)) { + this.setFeignHttpClient(additionalProperties.get(FEIGN_HTTP_CLIENT).toString()); + if (!Arrays.asList(FEIGN_SUPPORTED_HTTP_CLIENTS).contains(feignHttpClient)){ + throw new RuntimeException("Invalid feignOption '" + feignHttpClient + "'. Valid options are: " + Arrays.toString(FEIGN_SUPPORTED_HTTP_CLIENTS)); + } + } + additionalProperties.put("useApacheHttpClient", feignHttpClient.equals(FEIGN_APACHE_HTTP_CLIENT)); + if (additionalProperties.containsKey(PARCELABLE_MODEL)) { this.setParcelableModel(Boolean.valueOf(additionalProperties.get(PARCELABLE_MODEL).toString())); } @@ -805,6 +820,10 @@ public void setFeignVersion(String feignVersion) { this.feignVersion = feignVersion; } + public void setFeignHttpClient(String feignHttpClient) { + this.feignHttpClient = feignHttpClient; + } + public void setParcelableModel(boolean parcelableModel) { this.parcelableModel = parcelableModel; } diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/feign/ApiClient.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/feign/ApiClient.mustache index 47e993012f20..314f0a7ffa79 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/feign/ApiClient.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/feign/ApiClient.mustache @@ -29,6 +29,9 @@ import com.fasterxml.jackson.datatype.threetenbp.ThreeTenModule; import feign.Feign; import feign.RequestInterceptor; import feign.form.FormEncoder; +{{#useApacheHttpClient}} +import feign.httpclient.ApacheHttpClient; +{{/useApacheHttpClient}} import feign.jackson.JacksonDecoder; import feign.jackson.JacksonEncoder; import feign.slf4j.Slf4jLogger; @@ -50,6 +53,9 @@ public class ApiClient { objectMapper = createObjectMapper(); apiAuthorizations = new LinkedHashMap(); feignBuilder = Feign.builder() + {{#useApacheHttpClient}} + .client(new ApacheHttpClient()) + {{/useApacheHttpClient}} .encoder(new FormEncoder(new JacksonEncoder(objectMapper))) .decoder(new JacksonDecoder(objectMapper)) .logger(new Slf4jLogger()); diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/feign/build.gradle.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/feign/build.gradle.mustache index 2a6c4c79fbc5..16e3bdf0e060 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/feign/build.gradle.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/feign/build.gradle.mustache @@ -128,6 +128,9 @@ ext { {{/threetenbp}} feign_version = "{{#useFeign10}}10.7.4{{/useFeign10}}{{^useFeign10}}9.7.0{{/useFeign10}}" feign_form_version = "{{#useFeign10}}3.8.0{{/useFeign10}}{{^useFeign10}}2.1.0{{/useFeign10}}" + {{#useApacheHttpClient}} + feign_httpclient_version = "10.8" + {{/useApacheHttpClient}} junit_version = "4.13" oltu_version = "1.0.1" } @@ -139,6 +142,9 @@ dependencies { compile "io.github.openfeign:feign-jackson:$feign_version" compile "io.github.openfeign:feign-slf4j:$feign_version" compile "io.github.openfeign.form:feign-form:$feign_form_version" + {{#useApacheHttpClient}} + compile "io.github.openfeign:feign-httpclient:$feign_httpclient_version" + {{/useApacheHttpClient}} compile "com.fasterxml.jackson.core:jackson-core:$jackson_version" compile "com.fasterxml.jackson.core:jackson-annotations:$jackson_version" compile "com.fasterxml.jackson.core:jackson-databind:$jackson_databind_version" diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/feign/build.sbt.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/feign/build.sbt.mustache index 8fa1d345b26f..2b4b8893ad63 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/feign/build.sbt.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/feign/build.sbt.mustache @@ -13,6 +13,9 @@ lazy val root = (project in file(".")). "io.github.openfeign" % "feign-core" % "{{#useFeign10}}10.7.4{{/useFeign10}}{{^useFeign10}}9.7.0{{/useFeign10}}" % "compile", "io.github.openfeign" % "feign-jackson" % "{{#useFeign10}}10.7.4{{/useFeign10}}{{^useFeign10}}9.7.0{{/useFeign10}}" % "compile", "io.github.openfeign" % "feign-slf4j" % "{{#useFeign10}}10.7.4{{/useFeign10}}{{^useFeign10}}9.7.0{{/useFeign10}}" % "compile", + {{#useApacheHttpClient}} + "io.github.openfeign" % "feign-httpclient" % "10.8" % "compile", + {{/useApacheHttpClient}} "io.github.openfeign.form" % "feign-form" % "{{#useFeign10}}3.8.0{{/useFeign10}}{{^useFeign10}}2.1.0{{/useFeign10}}" % "compile", "com.fasterxml.jackson.core" % "jackson-core" % "2.10.3" % "compile", "com.fasterxml.jackson.core" % "jackson-annotations" % "2.10.3" % "compile", diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/feign/pom.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/feign/pom.mustache index 86f6f397781d..c9e77116b074 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/feign/pom.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/feign/pom.mustache @@ -225,6 +225,13 @@ feign-slf4j ${feign-version} + {{#useApacheHttpClient}} + + io.github.openfeign + feign-httpclient + ${feign-httpclient-version} + + {{/useApacheHttpClient}} io.github.openfeign.form feign-form @@ -317,6 +324,9 @@ 1.5.21 {{#useFeign10}}10.7.4{{/useFeign10}}{{^useFeign10}}9.7.0{{/useFeign10}} {{#useFeign10}}3.8.0{{/useFeign10}}{{^useFeign10}}2.1.0{{/useFeign10}} + {{#useApacheHttpClient}} + 10.8 + {{/useApacheHttpClient}} 2.10.3 0.2.1 2.10.3 From 2d033be5d81c252da3b690cd7b55c45701a987f5 Mon Sep 17 00:00:00 2001 From: gaetPax Date: Mon, 9 Nov 2020 18:30:57 +0100 Subject: [PATCH 2/3] [Java-Feign-issue 5709] - updated 'feignHttpClient' version to 11.0 --- .../main/resources/Java/libraries/feign/build.gradle.mustache | 2 +- .../src/main/resources/Java/libraries/feign/build.sbt.mustache | 2 +- .../src/main/resources/Java/libraries/feign/pom.mustache | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/feign/build.gradle.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/feign/build.gradle.mustache index b88da9eee2c0..08aef47d1994 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/feign/build.gradle.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/feign/build.gradle.mustache @@ -129,7 +129,7 @@ ext { feign_version = "{{#useFeign10}}11.0{{/useFeign10}}{{^useFeign10}}9.7.0{{/useFeign10}}" feign_form_version = "{{#useFeign10}}3.8.0{{/useFeign10}}{{^useFeign10}}2.1.0{{/useFeign10}}" {{#useApacheHttpClient}} - feign_httpclient_version = "10.8" + feign_httpclient_version = "11.0" {{/useApacheHttpClient}} junit_version = "4.13" oltu_version = "1.0.1" diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/feign/build.sbt.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/feign/build.sbt.mustache index 0990d04a63a6..0e918b51b418 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/feign/build.sbt.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/feign/build.sbt.mustache @@ -14,7 +14,7 @@ lazy val root = (project in file(".")). "io.github.openfeign" % "feign-jackson" % "{{#useFeign10}}11.0{{/useFeign10}}{{^useFeign10}}9.7.0{{/useFeign10}}" % "compile", "io.github.openfeign" % "feign-slf4j" % "{{#useFeign10}}11.0{{/useFeign10}}{{^useFeign10}}9.7.0{{/useFeign10}}" % "compile", {{#useApacheHttpClient}} - "io.github.openfeign" % "feign-httpclient" % "10.8" % "compile", + "io.github.openfeign" % "feign-httpclient" % "11.0" % "compile", {{/useApacheHttpClient}} "io.github.openfeign.form" % "feign-form" % "{{#useFeign10}}3.8.0{{/useFeign10}}{{^useFeign10}}2.1.0{{/useFeign10}}" % "compile", "com.fasterxml.jackson.core" % "jackson-core" % "2.10.3" % "compile", diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/feign/pom.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/feign/pom.mustache index cd5de006ab3a..7bec4c0606d8 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/feign/pom.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/feign/pom.mustache @@ -358,7 +358,7 @@ {{#useFeign10}}11.0{{/useFeign10}}{{^useFeign10}}9.7.0{{/useFeign10}} {{#useFeign10}}3.8.0{{/useFeign10}}{{^useFeign10}}2.1.0{{/useFeign10}} {{#useApacheHttpClient}} - 10.8 + 11.0 {{/useApacheHttpClient}} 2.10.3 0.2.1 From df510e41d0d919367c095a1e840e1e139de4c2bb Mon Sep 17 00:00:00 2001 From: gaetPax Date: Mon, 9 Nov 2020 20:04:27 +0100 Subject: [PATCH 3/3] [Java-Feign-issue 5709] - removed unused FEIGN_VERSION constant --- .../org/openapitools/codegen/languages/JavaClientCodegen.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java index 3b48a3829ea7..db3dbd9415a5 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java @@ -55,7 +55,6 @@ public class JavaClientCodegen extends AbstractJavaCodegen public static final String DO_NOT_USE_RX = "doNotUseRx"; public static final String USE_PLAY_WS = "usePlayWS"; public static final String PLAY_VERSION = "playVersion"; - public static final String FEIGN_VERSION = "feignVersion"; public static final String FEIGN_HTTP_CLIENT = "feignHttpClient"; public static final String FEIGN_DEFAULT_HTTP_CLIENT = "default"; public static final String FEIGN_APACHE_HTTP_CLIENT = "apacheHttpClient"; @@ -152,7 +151,6 @@ public JavaClientCodegen() { cliOptions.add(CliOption.newBoolean(USE_GZIP_FEATURE, "Send gzip-encoded requests")); cliOptions.add(CliOption.newBoolean(USE_RUNTIME_EXCEPTION, "Use RuntimeException instead of Exception")); cliOptions.add(CliOption.newBoolean(ASYNC_NATIVE, "If true, async handlers will be used, instead of the sync version")); - cliOptions.add(CliOption.newBoolean(FEIGN_VERSION, "Version of OpenFeign: '10.x' (default), '9.x' (deprecated)")); cliOptions.add(CliOption.newBoolean(FEIGN_HTTP_CLIENT, "Use an alternative httpClient module in the FeignClient: " + Arrays.toString(FEIGN_SUPPORTED_HTTP_CLIENTS))); cliOptions.add(CliOption.newBoolean(USE_REFLECTION_EQUALS_HASHCODE, "Use org.apache.commons.lang3.builder for equals and hashCode in the models. WARNING: This will fail under a security manager, unless the appropriate permissions are set up correctly and also there's potential performance impact.")); cliOptions.add(CliOption.newBoolean(CASE_INSENSITIVE_RESPONSE_HEADERS, "Make API response's headers case-insensitive. Available on " + OKHTTP_GSON + ", " + JERSEY2 + " libraries"));