Skip to content
Merged
Show file tree
Hide file tree
Changes from 57 commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
41e97e6
Mustache template should use invokerPackage tag to generate import
sebastien-rosset May 13, 2020
1760f6a
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 13, 2020
3ae466e
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 13, 2020
b628667
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 13, 2020
4dc915c
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 14, 2020
7a207f6
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 16, 2020
776fba6
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 18, 2020
3fac434
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 19, 2020
a96c46b
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 20, 2020
1351fd0
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 21, 2020
ba65735
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 22, 2020
9a0b89e
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 22, 2020
4c84190
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 22, 2020
94ae683
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 22, 2020
aac9f5a
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 23, 2020
93baa3d
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 23, 2020
5c313b4
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 23, 2020
cda8898
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 23, 2020
1f7e5c1
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 24, 2020
bef435e
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 25, 2020
a9cad38
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 26, 2020
877ecfe
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 27, 2020
8c055f5
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 27, 2020
d64f421
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 28, 2020
4d0edfe
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 28, 2020
476eb01
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 29, 2020
8ff6088
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 30, 2020
ac1a061
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 30, 2020
8579966
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 31, 2020
7c45925
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset May 31, 2020
7f52a53
Merge remote-tracking branch 'upstream/master'
vvb Jun 1, 2020
76d3348
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset Jun 1, 2020
797e779
Merge branch 'master' of github.com:CiscoM31/openapi-generator
sebastien-rosset Jun 1, 2020
700e0f9
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset Jun 2, 2020
cf45a86
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset Jun 2, 2020
ad3fa7e
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset Jun 4, 2020
12ecf34
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset Jun 4, 2020
6321dfc
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset Jun 4, 2020
c05b82e
add JsonSubTypes annotation to handle scenario when OAS name has spec…
sebastien-rosset Jun 4, 2020
92eadd7
add JsonSubTypes annotation to handle scenario when OAS name has spec…
sebastien-rosset Jun 4, 2020
ae8e870
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset Jun 5, 2020
a8d8b96
Merge branch 'master' of github.com:CiscoM31/openapi-generator into j…
sebastien-rosset Jun 5, 2020
97e490e
run sample scripts
sebastien-rosset Jun 5, 2020
3237fc6
fix unit test
sebastien-rosset Jun 5, 2020
d1f351b
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset Jun 5, 2020
5e2f013
run sample scripts
sebastien-rosset Jun 5, 2020
5d7aa84
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset Jun 8, 2020
76996aa
Merge branch 'master' of https://github.com/OpenAPITools/openapi-gene…
sebastien-rosset Jun 9, 2020
a873091
resolve merge conflicts
sebastien-rosset Jun 9, 2020
6ff9965
resolve merge conflicts. sync from master
sebastien-rosset Jul 7, 2020
ed663e0
add minimal openapi document to show issue with special characters an…
sebastien-rosset Jul 7, 2020
db62818
Add 'isClassnameSanitized' tag
sebastien-rosset Jul 7, 2020
b312cee
Add 'isClassnameSanitized' tag
sebastien-rosset Jul 7, 2020
12bfcd4
Add 'isClassnameSanitized' tag
sebastien-rosset Jul 7, 2020
c4a42a3
Add 'isClassnameSanitized' tag
sebastien-rosset Jul 7, 2020
e701504
Add 'isClassnameSanitized' tag
sebastien-rosset Jul 7, 2020
72f6a30
Add 'isClassnameSanitized' tag
sebastien-rosset Jul 7, 2020
9636649
Merge branch 'master' of github.com:CiscoM31/openapi-generator into j…
sebastien-rosset Jul 9, 2020
27a0c6c
Add unit tests for unmarshaling of discriminators with special charac…
sebastien-rosset Jul 14, 2020
05b168f
Merge branch 'master' of github.com:CiscoM31/openapi-generator into j…
sebastien-rosset Jul 14, 2020
da0dcc1
Add unit tests for unmarshaling of discriminators with special charac…
sebastien-rosset Jul 14, 2020
2a4c15a
Merge branch 'master' of github.com:CiscoM31/openapi-generator into j…
sebastien-rosset Jul 17, 2020
1f5fc0c
use JsonTypeName
wing328 Jul 17, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,11 @@ public class CodegenModel implements IJsonSchemaValidationProperties {
public Set<String> oneOf = new TreeSet<String>();
public Set<String> allOf = new TreeSet<String>();

// The schema name as written in the OpenAPI document.
public String name;
// The language-specific name of the class that implements this schema.
// The name of the class is derived from the OpenAPI schema name with formatting rules applied.
// The classname is derived from the OpenAPI schema name, with sanitization and escaping rules applied.
public String classname;
// The value of the 'title' attribute in the OpenAPI document.
public String title;
Expand Down Expand Up @@ -215,6 +217,17 @@ public void setClassVarName(String classVarName) {
this.classVarName = classVarName;
}

/**
* Return true if the classname property is sanitized, false if it is the same as the OpenAPI schema name.
* The OpenAPI schema name may be any valid JSON schema name, including non-ASCII characters.
* The name of the class may have to be sanitized with character escaping.
*
* @return true if the classname property is sanitized
*/
public boolean getIsClassnameSanitized() {
return !classname.equals(name);
}

public String getClassname() {
return classname;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,7 @@
{{#discriminator.mappedModels}}
@JsonSubTypes.Type(value = {{modelName}}.class, name = "{{^vendorExtensions.x-discriminator-value}}{{mappingName}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}"),
{{/discriminator.mappedModels}}
{{#isClassnameSanitized}}
@JsonSubTypes.Type(value = {{classname}}.class, name = "{{name}}"),
Copy link
Contributor Author

@sebastien-rosset sebastien-rosset Jul 7, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When the OpenAPI schema name has special characters, we need to have a mapping between the class name and the OpenAPI name.

For example, if the OpenAPI schema name is MySchemaName._-Characters, then the generated code should have a @JsonSubTypes.Type mapping as shown below.

@JsonSubTypes({
  @JsonSubTypes.Type(value = MySchemaNameCharacters.class, name = "MySchemaName._-Characters"),
})

public class MySchemaNameCharacters extends Parent {

{{/isClassnameSanitized}}
}){{/jackson}}
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
openapi: 3.0.3
info:
description: test
version: 1.0.0
title: test
paths:
/test:
post:
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/MySchemaName._-Characters'
responses:
'200':
description: the response
content:
application/json:
schema:
$ref: '#/components/schemas/MySchemaName._-Characters'
components:
schemas:
Parent:
properties:
prop1:
type: string
discriminator:
propertyName: prop1
# Note: the name below with non-ASCII characters is a valid JSON schema name,
# however currently OpenAPI generator does not allow special characters beyond [.-_]
#
# The set of allowed characters for OpenAPI schema names is specified in RFC 8259
# at https://tools.ietf.org/html/rfc8259.
# The OpenAPI schema uses the JSON schema specification, which references RFC 8259.
# A string is a sequence of zero or more Unicode characters [UNICODE].
# Note that this citation references the latest version of Unicode
# rather than a specific release. Any character may be escaped.
# MySchemaNameWithUnusual#$12.3!@#%🍇🍅😀🏄🏾‍♂️Characters:
Copy link
Contributor Author

@sebastien-rosset sebastien-rosset Jul 13, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@wing328 , fyi MySchemaNameWithUnusual#$12.3!@#%🍇🍅😀🏄🏾‍♂️Characters is a valid JSON schema name, but OpenAPI generator does not allow this.

MySchemaName._-Characters:
description:
A schema name that has letters, numbers, punctuation and non-ASCII characters.
The sanitization rules should make it possible to generate a language-specific
classname with allowed characters in that programming language.
allOf:
- $ref: '#/components/schemas/Parent'
- type: object
properties:
prop2:
type: string
# Below is a schema with the same name, except special characters have been removed.
#MySchemaNameCharacters:
# description:
# A schema with same name as above, without the special characters.
# allOf:
# - $ref: '#/components/schemas/Parent'
# - type: object
# properties:
# prop2:
# type: string
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.openapitools.client;

import org.openapitools.client.model.Order;
import org.openapitools.client.model.SpecialModelName;

import java.lang.Exception;
import java.util.Date;
Expand Down Expand Up @@ -71,4 +72,19 @@ public void testCustomDate() throws Exception {
Order o = json.getContext(null).readValue(str, Order.class);
assertEquals(dateStr, dateFormat.format(o.getShipDate()));
}

/**
* Validate a schema with special characters can be deserialized.
*/
@Test
public void testSchemaWithSpecialCharacters() throws Exception {
String str = "{ \"$special[property.name]\": 12345 }";
// The name of the OpenAPI schema is '_special_model.name_'.
// After sanitization rules are applied the name of the class is 'SpecialModelName'.
// The class deserialization should be successful because
// of the @JsonSubTypes annotation.
SpecialModelName o = json.getContext(null).readValue(str, SpecialModelName.class);
assertNotNull(o);
assertEquals((long)12345, (long)o.get$SpecialPropertyName());
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.openapitools.client;

import org.openapitools.client.model.Order;
import org.openapitools.client.model.SpecialModelName;

import java.lang.Exception;
import java.util.Date;
Expand Down Expand Up @@ -71,4 +72,19 @@ public void testCustomDate() throws Exception {
Order o = json.getContext(null).readValue(str, Order.class);
assertEquals(dateStr, dateFormat.format(o.getShipDate()));
}

/**
* Validate a schema with special characters can be deserialized.
*/
@Test
public void testSchemaWithSpecialCharacters() throws Exception {
String str = "{ \"$special[property.name]\": 12345 }";
// The name of the OpenAPI schema is '_special_model.name_'.
// After sanitization rules are applied the name of the class is 'SpecialModelName'.
// The class deserialization should be successful because
// of the @JsonSubTypes annotation.
SpecialModelName o = json.getContext(null).readValue(str, SpecialModelName.class);
assertNotNull(o);
assertEquals((long)12345, (long)o.get$SpecialPropertyName());
}
}