From d97918de27dc01d581c34d9cb6935a52e354786a Mon Sep 17 00:00:00 2001 From: Kevin Locke Date: Fri, 28 Jun 2019 20:40:30 -0600 Subject: [PATCH] [Java] Handle discriminator mapping non-ref name 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 d3998a47bca3..9955908058c4 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 @@ -1860,8 +1860,10 @@ private CodegenDiscriminator createDiscriminator(String schemaName, Schema schem 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 b8b3a7179055..0ac238286369 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 @@ -582,7 +582,7 @@ private void verifyPersonDiscriminator(CodegenDiscriminator discriminator) { 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 6f01aeb80c91..4d781cb871a3 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