From 2c342cc2b4bab7e6cd417d74df66d9ce1c6d0963 Mon Sep 17 00:00:00 2001 From: Kevin Locke Date: Thu, 4 Jul 2019 07:24:47 +0000 Subject: [PATCH] [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 --- .../main/java/org/openapitools/codegen/DefaultCodegen.java | 6 ++++-- .../java/org/openapitools/codegen/DefaultCodegenTest.java | 2 +- modules/openapi-generator/src/test/resources/3_0/allOf.yaml | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index 811b49c02a6..67fd4452099 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -1867,8 +1867,10 @@ public class DefaultCodegen implements CodegenConfig { discriminator.setMapping(schema.getDiscriminator().getMapping()); if (schema.getDiscriminator().getMapping() != null && !schema.getDiscriminator().getMapping().isEmpty()) { for (Entry e : schema.getDiscriminator().getMapping().entrySet()) { - String name = toModelName(ModelUtils.getSimpleRef(e.getValue())); // e.g e.getValue => #/components/schemas/Dog - discriminator.getMappedModels().add(new MappedModel(e.getKey(), name)); + String nameOrRef = e.getValue(); + String name = nameOrRef.indexOf('/') >= 0 ? ModelUtils.getSimpleRef(nameOrRef) : nameOrRef; + String modelName = toModelName(name); + discriminator.getMappedModels().add(new MappedModel(e.getKey(), modelName)); } } else { Map allDefinitions = ModelUtils.getSchemas(this.openAPI); diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java index 8c2e2aabc63..a95b6f106b1 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java @@ -583,7 +583,7 @@ public class DefaultCodegenTest { test.setPropertyName("DollarUnderscoretype"); test.setMapping(new HashMap<>()); test.getMapping().put("a", "#/components/schemas/Adult"); - test.getMapping().put("c", "#/components/schemas/Child"); + test.getMapping().put("c", "Child"); test.getMappedModels().add(new CodegenDiscriminator.MappedModel("a", "Adult")); test.getMappedModels().add(new CodegenDiscriminator.MappedModel("c", "Child")); Assert.assertEquals(discriminator, test); diff --git a/modules/openapi-generator/src/test/resources/3_0/allOf.yaml b/modules/openapi-generator/src/test/resources/3_0/allOf.yaml index 6f01aeb80c9..4d781cb871a 100644 --- a/modules/openapi-generator/src/test/resources/3_0/allOf.yaml +++ b/modules/openapi-generator/src/test/resources/3_0/allOf.yaml @@ -32,7 +32,7 @@ components: propertyName: $_type mapping: a: '#/components/schemas/Adult' - c: '#/components/schemas/Child' + c: Child properties: $_type: type: string