Skip to content

Commit 93d018c

Browse files
committed
Merge branch 'fix/missing-discriminator' of https://github.com/LVM-IT/swagger-codegen-generators into LVM-IT-fix/missing-discriminator
2 parents b7bc7d5 + b64f03a commit 93d018c

File tree

3 files changed

+109
-5
lines changed

3 files changed

+109
-5
lines changed

src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1333,6 +1333,8 @@ public CodegenModel fromModel(String name, Schema schema, Map<String, Schema> al
13331333
}
13341334
codegenModel.getVendorExtensions().put(CodegenConstants.IS_ALIAS_EXT_NAME, typeAliases.containsKey(name));
13351335

1336+
codegenModel.discriminator = schema.getDiscriminator();
1337+
13361338
if (schema.getXml() != null) {
13371339
codegenModel.xmlPrefix = schema.getXml().getPrefix();
13381340
codegenModel.xmlNamespace = schema.getXml().getNamespace();
@@ -1398,11 +1400,8 @@ else if (schema instanceof ComposedSchema) {
13981400
// interfaces (intermediate models)
13991401
if (allOf != null && !allOf.isEmpty()) {
14001402

1401-
if (schema.getDiscriminator() != null) {
1402-
codegenModel.discriminator = schema.getDiscriminator();
1403-
if (codegenModel.discriminator != null && codegenModel.discriminator.getPropertyName() != null) {
1404-
codegenModel.discriminator.setPropertyName(toVarName(codegenModel.discriminator.getPropertyName()));
1405-
}
1403+
if (codegenModel.discriminator != null && codegenModel.discriminator.getPropertyName() != null) {
1404+
codegenModel.discriminator.setPropertyName(toVarName(codegenModel.discriminator.getPropertyName()));
14061405
}
14071406

14081407
for (int i = 0; i < allOf.size(); i++) {
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package io.swagger.codegen.v3.generators.java;
2+
3+
import io.swagger.codegen.v3.ClientOptInput;
4+
import io.swagger.codegen.v3.DefaultGenerator;
5+
import io.swagger.codegen.v3.config.CodegenConfigurator;
6+
import org.apache.commons.io.FileUtils;
7+
import org.junit.rules.TemporaryFolder;
8+
import org.testng.Assert;
9+
import org.testng.annotations.Test;
10+
11+
import java.io.File;
12+
13+
public class JavaPolymorphicAnnotationCodegenTest {
14+
15+
private TemporaryFolder folder = new TemporaryFolder();
16+
17+
@Test(description = "verify that jackson-polymorphism annotations are generated")
18+
public void testParameterOrders() throws Exception {
19+
this.folder.create();
20+
final File output = this.folder.getRoot();
21+
22+
final CodegenConfigurator configurator = new CodegenConfigurator()
23+
.setLang("spring")
24+
.setInputSpecURL("src/test/resources/3_0_0/polymorphicSchema.yaml")
25+
.setOutputDir(output.getAbsolutePath());
26+
27+
final ClientOptInput clientOptInput = configurator.toClientOptInput();
28+
new DefaultGenerator().opts(clientOptInput).generate();
29+
30+
final File petControllerFile = new File(output, "/src/main/java/io/swagger/model/PolymorphicResponse.java");
31+
final String content = FileUtils.readFileToString(petControllerFile);
32+
33+
Assert.assertTrue(content.contains(
34+
"@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = \"type\", visible = true )\n" +
35+
"@JsonSubTypes({\n" +
36+
" @JsonSubTypes.Type(value = Error.class, name = \"Error\"),\n" +
37+
" @JsonSubTypes.Type(value = Success.class, name = \"Success\"),\n" +
38+
"})"));
39+
40+
this.folder.delete();
41+
}
42+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
openapi: 3.0.3
2+
info:
3+
description: This is a simple API
4+
version: "1.0.0"
5+
title: Simple Inventory API
6+
servers:
7+
- description: test definition
8+
url: /
9+
paths:
10+
/provision:
11+
get:
12+
tags:
13+
- provision
14+
summary: inheritanceTest
15+
operationId: provision
16+
description: inheritanceTest
17+
responses:
18+
200:
19+
description: default response
20+
content:
21+
application/json:
22+
schema:
23+
$ref: '#/components/schemas/PolymorphicResponse'
24+
25+
components:
26+
schemas:
27+
PolymorphicResponse:
28+
type: object
29+
required:
30+
- type
31+
properties:
32+
type:
33+
type: string
34+
enum:
35+
- Success
36+
- Error
37+
description: the descriminator
38+
discriminator:
39+
propertyName: type
40+
Success:
41+
allOf:
42+
- $ref: '#/components/schemas/PolymorphicResponse'
43+
- type: object
44+
required:
45+
- target
46+
properties:
47+
target:
48+
type: string
49+
description: some target value
50+
dialogId:
51+
type: string
52+
format: uuid
53+
description: some dialogId
54+
Error:
55+
allOf:
56+
- $ref: '#/components/schemas/PolymorphicResponse'
57+
- type: object
58+
required:
59+
- message
60+
properties:
61+
message:
62+
type: string
63+
description: the message describing the error

0 commit comments

Comments
 (0)