Skip to content

Commit 24b64e1

Browse files
committed
updated datatype for arrayschema with composed schema items
1 parent 27a3df5 commit 24b64e1

File tree

3 files changed

+39
-2
lines changed

3 files changed

+39
-2
lines changed

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,9 @@ protected CodegenModel processArrayItemSchema(CodegenModel codegenModel, ArraySc
128128
protected CodegenModel processArrayItemSchema(String codegenModelName, CodegenProperty codegenProperty, ArraySchema arraySchema, Map<String, CodegenModel> allModels) {
129129
final Schema itemsSchema = arraySchema.getItems();
130130
if (itemsSchema instanceof ComposedSchema) {
131-
return this.processComposedSchema(codegenModelName, codegenProperty, (ComposedSchema) itemsSchema, allModels);
131+
final CodegenModel composedModel = this.processComposedSchema(codegenModelName + ARRAY_ITEMS_SUFFIX, codegenProperty.items, (ComposedSchema) itemsSchema, allModels);
132+
this.updatePropertyDataType(codegenProperty, composedModel, arraySchema);
133+
return composedModel;
132134
}
133135
return null;
134136
}
@@ -188,4 +190,15 @@ protected void addComposedModel(CodegenModel composedModel) {
188190
}
189191
this.composedModels.add(composedModel);
190192
}
193+
194+
protected void updatePropertyDataType(CodegenProperty codegenProperty, CodegenModel composedModel, ArraySchema arraySchema) {
195+
final Schema items = arraySchema.getItems();
196+
final Schema refSchema = new Schema();
197+
refSchema.set$ref("#/components/schemas/" + composedModel.getClassname());
198+
arraySchema.setItems(refSchema);
199+
codegenProperty.setDatatype(this.codegenConfig.getTypeDeclaration(arraySchema));
200+
codegenProperty.setDatatypeWithEnum(codegenProperty.getDatatype());
201+
202+
arraySchema.setItems(items);
203+
}
191204
}

src/test/java/io/swagger/codegen/v3/generators/dotnet/AspNetCoreServerCodegenTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
import io.swagger.codegen.v3.CodegenConfig;
44
import io.swagger.codegen.v3.CodegenModel;
5+
import io.swagger.codegen.v3.CodegenProperty;
56
import io.swagger.codegen.v3.generators.AbstractCodegenTest;
67
import io.swagger.codegen.v3.generators.CodegenWrapper;
8+
import io.swagger.util.Yaml;
79
import io.swagger.v3.oas.models.OpenAPI;
810
import org.testng.Assert;
911
import org.testng.annotations.Test;
@@ -18,4 +20,16 @@ public void checkArrayItemsSchemaParent() {
1820
CodegenModel codegenModel = codegenWrapper.getAllModels().get("AllPetsResponse");
1921
Assert.assertEquals(codegenModel.parent, "List<OneOfAllPetsResponseItems>");
2022
}
23+
24+
@Test
25+
public void checkArrayItemsSchemaProperty() {
26+
final OpenAPI openAPI = getOpenAPI("3_0_0/composed_schemas.yaml");
27+
final CodegenConfig config = new AspNetCoreServerCodegen();
28+
final CodegenWrapper codegenWrapper = processSchemas(config, openAPI);
29+
final CodegenModel codegenModel = codegenWrapper.getAllModels().get("House");
30+
31+
final CodegenProperty codegenProperty = codegenModel.vars.stream().filter(property -> property.baseName.equals("pets")).findFirst().get();
32+
Assert.assertEquals(codegenProperty.datatype, "List<OneOfHousePetsItems>");
33+
34+
}
2135
}

src/test/resources/3_0_0/composed_schemas.yaml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,4 +151,14 @@ components:
151151
hunts:
152152
type: boolean
153153
age:
154-
type: integer
154+
type: integer
155+
156+
House:
157+
type: object
158+
properties:
159+
pets:
160+
items:
161+
oneOf:
162+
- "$ref": "#/components/schemas/Dog"
163+
- "$ref": "#/components/schemas/Cat"
164+
type: array

0 commit comments

Comments
 (0)