Skip to content

Commit 72b1749

Browse files
committed
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.
1 parent 3c5fb1d commit 72b1749

File tree

4 files changed

+18
-1
lines changed

4 files changed

+18
-1
lines changed

modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractJavaCodegen.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
5353
public static final String JAVA8_MODE = "java8";
5454
public static final String WITH_XML = "withXml";
5555
public static final String SUPPORT_JAVA6 = "supportJava6";
56+
public static final String DISABLE_HTML_ESCAPING = "disableHtmlEscaping";
5657

5758
protected String dateLibrary = "threetenbp";
5859
protected boolean java8Mode = false;
@@ -85,6 +86,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
8586
protected String apiDocPath = "docs/";
8687
protected String modelDocPath = "docs/";
8788
protected boolean supportJava6= false;
89+
protected boolean disableHtmlEscaping = false;
8890

8991
public AbstractJavaCodegen() {
9092
super();
@@ -174,6 +176,7 @@ public AbstractJavaCodegen() {
174176
java8Mode.setEnum(java8ModeOptions);
175177
cliOptions.add(java8Mode);
176178

179+
cliOptions.add(CliOption.newBoolean(DISABLE_HTML_ESCAPING, "Disable HTML escaping of JSON strings when using gson (needed to avoid problems with byte[] fields)"));
177180
}
178181

179182
@Override
@@ -185,6 +188,10 @@ public void processOpts() {
185188
}
186189
additionalProperties.put(SUPPORT_JAVA6, supportJava6);
187190

191+
if (additionalProperties.containsKey(DISABLE_HTML_ESCAPING)) {
192+
this.setDisableHtmlEscaping(Boolean.valueOf(additionalProperties.get(DISABLE_HTML_ESCAPING).toString()));
193+
}
194+
additionalProperties.put(DISABLE_HTML_ESCAPING, disableHtmlEscaping);
188195

189196
if (additionalProperties.containsKey(CodegenConstants.INVOKER_PACKAGE)) {
190197
this.setInvokerPackage((String) additionalProperties.get(CodegenConstants.INVOKER_PACKAGE));
@@ -1217,6 +1224,10 @@ public void setJava8Mode(boolean enabled) {
12171224
this.java8Mode = enabled;
12181225
}
12191226

1227+
public void setDisableHtmlEscaping(boolean disabled) {
1228+
this.disableHtmlEscaping = disabled;
1229+
}
1230+
12201231
@Override
12211232
public String escapeQuotationMark(String input) {
12221233
// remove " to avoid code injection

modules/swagger-codegen/src/main/resources/Java/JSON.mustache

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,11 @@ public class JSON {
7676
})
7777
{{/parent}}
7878
;
79-
return fireBuilder.createGsonBuilder();
79+
GsonBuilder builder = fireBuilder.createGsonBuilder();
80+
{{#disableHtmlEscaping}}
81+
builder.disableHtmlEscaping();
82+
{{/disableHtmlEscaping}}
83+
return builder;
8084
}
8185

8286
private static String getDiscriminatorValue(JsonElement readElement, String discriminatorField) {

modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JavaOptionsProvider.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ public JavaOptionsProvider() {
7171
.put(JavaClientCodegen.JAVA8_MODE, JAVA8_MODE_VALUE)
7272
.put(CodegenConstants.SERIALIZE_BIG_DECIMAL_AS_STRING, "true")
7373
.put(JavaClientCodegen.DATE_LIBRARY, "joda")
74+
.put(JavaClientCodegen.DISABLE_HTML_ESCAPING, "false")
7475
.put("hideGenerationTimestamp", "true")
7576
.put(CodegenConstants.ALLOW_UNICODE_IDENTIFIERS, ALLOW_UNICODE_IDENTIFIERS_VALUE)
7677
//.put("supportJava6", "true")

modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JaxRSServerOptionsProvider.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ public Map<String, String> createOptions() {
8989
.put(JavaClientCodegen.WITH_XML, WITH_XML_VALUE)
9090
//.put(JavaClientCodegen.DATE_LIBRARY, "joda")
9191
.put("hideGenerationTimestamp", "true")
92+
.put(JavaClientCodegen.DISABLE_HTML_ESCAPING, "false")
9293
.put(JavaCXFServerCodegen.USE_BEANVALIDATION, USE_BEANVALIDATION)
9394
.put("serverPort", "2345")
9495
.put(CodegenConstants.ALLOW_UNICODE_IDENTIFIERS, ALLOW_UNICODE_IDENTIFIERS_VALUE)

0 commit comments

Comments
 (0)