Skip to content

Commit 2c342cc

Browse files
kevinoidwing328
authored andcommitted
[Java] Handle discriminator mapping non-ref name (#3247)
The `mapping` property of the [Discriminator Object] is "An object to hold mappings between payload values and schema names or references." The subsequent examples in the spec have `mapping`s of both types. The `mapping` support introduced in #536 only supports references. Update the code to support names (identified by lack of `/`) or references and change a test mapping to cover this case. [Discriminator Object]: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#discriminatorObject Signed-off-by: Kevin Locke <[email protected]>
1 parent 310f5fe commit 2c342cc

File tree

3 files changed

+6
-4
lines changed

3 files changed

+6
-4
lines changed

modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1867,8 +1867,10 @@ private CodegenDiscriminator createDiscriminator(String schemaName, Schema schem
18671867
discriminator.setMapping(schema.getDiscriminator().getMapping());
18681868
if (schema.getDiscriminator().getMapping() != null && !schema.getDiscriminator().getMapping().isEmpty()) {
18691869
for (Entry<String, String> e : schema.getDiscriminator().getMapping().entrySet()) {
1870-
String name = toModelName(ModelUtils.getSimpleRef(e.getValue())); // e.g e.getValue => #/components/schemas/Dog
1871-
discriminator.getMappedModels().add(new MappedModel(e.getKey(), name));
1870+
String nameOrRef = e.getValue();
1871+
String name = nameOrRef.indexOf('/') >= 0 ? ModelUtils.getSimpleRef(nameOrRef) : nameOrRef;
1872+
String modelName = toModelName(name);
1873+
discriminator.getMappedModels().add(new MappedModel(e.getKey(), modelName));
18721874
}
18731875
} else {
18741876
Map<String, Schema> allDefinitions = ModelUtils.getSchemas(this.openAPI);

modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -583,7 +583,7 @@ private void verifyPersonDiscriminator(CodegenDiscriminator discriminator) {
583583
test.setPropertyName("DollarUnderscoretype");
584584
test.setMapping(new HashMap<>());
585585
test.getMapping().put("a", "#/components/schemas/Adult");
586-
test.getMapping().put("c", "#/components/schemas/Child");
586+
test.getMapping().put("c", "Child");
587587
test.getMappedModels().add(new CodegenDiscriminator.MappedModel("a", "Adult"));
588588
test.getMappedModels().add(new CodegenDiscriminator.MappedModel("c", "Child"));
589589
Assert.assertEquals(discriminator, test);

modules/openapi-generator/src/test/resources/3_0/allOf.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ components:
3232
propertyName: $_type
3333
mapping:
3434
a: '#/components/schemas/Adult'
35-
c: '#/components/schemas/Child'
35+
c: Child
3636
properties:
3737
$_type:
3838
type: string

0 commit comments

Comments
 (0)