From 7b00cc565ae25550d233cc8fcad3796b21d1b3c1 Mon Sep 17 00:00:00 2001 From: Stian Liknes Date: Wed, 4 Apr 2018 13:18:27 +0200 Subject: [PATCH 1/2] Configuration option to disable HTML escaping when using Gson The default implementation of Gson will escape certain characters by default. This includes the `=` character, which is used in base64 encoding and cause problems when deserializing the value to a base64 encoded string in a service. Adding an option for disabling this feature makes it easier to generate client code with sane defaults. --- .../codegen/languages/AbstractJavaCodegen.java | 13 ++++++++++++- .../src/main/resources/Java/JSON.mustache | 6 +++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java index b377f59f1944..33d07d7455bd 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java @@ -62,6 +62,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code public static final String SUPPORT_ASYNC = "supportAsync"; public static final String WITH_XML = "withXml"; public static final String SUPPORT_JAVA6 = "supportJava6"; + public static final String DISABLE_HTML_ESCAPING = "disableHtmlEscaping"; protected String dateLibrary = "threetenbp"; protected boolean supportAsync = false; @@ -93,7 +94,8 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code protected boolean serializeBigDecimalAsString = false; protected String apiDocPath = "docs/"; protected String modelDocPath = "docs/"; - protected boolean supportJava6 = false; + protected boolean supportJava6= false; + protected boolean disableHtmlEscaping = false; public AbstractJavaCodegen() { super(); @@ -185,6 +187,7 @@ public AbstractJavaCodegen() { java8Mode.setEnum(java8ModeOptions); cliOptions.add(java8Mode); + cliOptions.add(CliOption.newBoolean(DISABLE_HTML_ESCAPING, "Disable HTML escaping of JSON strings when using gson (needed to avoid problems with byte[] fields)")); } @Override @@ -196,6 +199,10 @@ public void processOpts() { } additionalProperties.put(SUPPORT_JAVA6, supportJava6); + if (additionalProperties.containsKey(DISABLE_HTML_ESCAPING)) { + this.setDisableHtmlEscaping(Boolean.valueOf(additionalProperties.get(DISABLE_HTML_ESCAPING).toString())); + } + additionalProperties.put(DISABLE_HTML_ESCAPING, disableHtmlEscaping); if (additionalProperties.containsKey(CodegenConstants.INVOKER_PACKAGE)) { this.setInvokerPackage((String) additionalProperties.get(CodegenConstants.INVOKER_PACKAGE)); @@ -1222,6 +1229,10 @@ public void setSupportAsync(boolean enabled) { this.supportAsync = enabled; } + public void setDisableHtmlEscaping(boolean disabled) { + this.disableHtmlEscaping = disabled; + } + @Override public String escapeQuotationMark(String input) { // remove " to avoid code injection diff --git a/modules/openapi-generator/src/main/resources/Java/JSON.mustache b/modules/openapi-generator/src/main/resources/Java/JSON.mustache index a717df178e3e..4ab6cee5cb1a 100644 --- a/modules/openapi-generator/src/main/resources/Java/JSON.mustache +++ b/modules/openapi-generator/src/main/resources/Java/JSON.mustache @@ -76,7 +76,11 @@ public class JSON { }) {{/parent}} ; - return fireBuilder.createGsonBuilder(); + GsonBuilder builder = fireBuilder.createGsonBuilder(); + {{#disableHtmlEscaping}} + builder.disableHtmlEscaping(); + {{/disableHtmlEscaping}} + return builder; } private static String getDiscriminatorValue(JsonElement readElement, String discriminatorField) { From 50106f084c96ccfa33c680b5141c001818d2afcf Mon Sep 17 00:00:00 2001 From: Stian Liknes Date: Wed, 13 Jun 2018 08:02:14 +0200 Subject: [PATCH 2/2] Update Petstore sample --- .../src/main/java/org/openapitools/client/JSON.java | 3 ++- .../src/main/java/org/openapitools/client/JSON.java | 3 ++- .../src/main/java/org/openapitools/client/JSON.java | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/samples/client/petstore/java/okhttp-gson-parcelableModel/src/main/java/org/openapitools/client/JSON.java b/samples/client/petstore/java/okhttp-gson-parcelableModel/src/main/java/org/openapitools/client/JSON.java index d9bc6e301ef8..f9f55a2d3821 100644 --- a/samples/client/petstore/java/okhttp-gson-parcelableModel/src/main/java/org/openapitools/client/JSON.java +++ b/samples/client/petstore/java/okhttp-gson-parcelableModel/src/main/java/org/openapitools/client/JSON.java @@ -64,7 +64,8 @@ public Class getClassForElement(JsonElement readElement) { } }) ; - return fireBuilder.createGsonBuilder(); + GsonBuilder builder = fireBuilder.createGsonBuilder(); + return builder; } private static String getDiscriminatorValue(JsonElement readElement, String discriminatorField) { diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/org/openapitools/client/JSON.java b/samples/client/petstore/java/okhttp-gson/src/main/java/org/openapitools/client/JSON.java index d9bc6e301ef8..f9f55a2d3821 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/org/openapitools/client/JSON.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/org/openapitools/client/JSON.java @@ -64,7 +64,8 @@ public Class getClassForElement(JsonElement readElement) { } }) ; - return fireBuilder.createGsonBuilder(); + GsonBuilder builder = fireBuilder.createGsonBuilder(); + return builder; } private static String getDiscriminatorValue(JsonElement readElement, String discriminatorField) { diff --git a/samples/client/petstore/java/rest-assured/src/main/java/org/openapitools/client/JSON.java b/samples/client/petstore/java/rest-assured/src/main/java/org/openapitools/client/JSON.java index d9bc6e301ef8..f9f55a2d3821 100644 --- a/samples/client/petstore/java/rest-assured/src/main/java/org/openapitools/client/JSON.java +++ b/samples/client/petstore/java/rest-assured/src/main/java/org/openapitools/client/JSON.java @@ -64,7 +64,8 @@ public Class getClassForElement(JsonElement readElement) { } }) ; - return fireBuilder.createGsonBuilder(); + GsonBuilder builder = fireBuilder.createGsonBuilder(); + return builder; } private static String getDiscriminatorValue(JsonElement readElement, String discriminatorField) {