Skip to content

Commit 52f95a9

Browse files
authored
Merge pull request #601 from swagger-api/html_generator_regresion_fix
fixed composed schema in arrays
2 parents 117dbb5 + 155156b commit 52f95a9

File tree

2 files changed

+52
-6
lines changed

2 files changed

+52
-6
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public void processComposedSchemas(CodegenModel codegenModel, Schema schema, Map
5858
processComposedSchema(codegenName, codegenProperty, (ComposedSchema) property, allModels);
5959
continue;
6060
}
61-
if (schema instanceof ArraySchema) {
61+
if (property instanceof ArraySchema) {
6262
this.processArrayItemSchema(codegenName, codegenProperty, (ArraySchema) property, allModels);
6363
continue;
6464
}
@@ -132,7 +132,7 @@ protected CodegenModel createComposedModel(String name, List<Schema> schemas) {
132132
return composedModel;
133133
}
134134

135-
private void addInterfaceModel(CodegenModel codegenModel, CodegenModel interfaceModel) {
135+
protected void addInterfaceModel(CodegenModel codegenModel, CodegenModel interfaceModel) {
136136
if (codegenModel == null) {
137137
return;
138138
}
@@ -142,7 +142,7 @@ private void addInterfaceModel(CodegenModel codegenModel, CodegenModel interface
142142
codegenModel.getInterfaceModels().add(interfaceModel);
143143
}
144144

145-
private void addInterfaces(List<Schema> schemas, CodegenModel codegenModel, Map<String, CodegenModel> allModels) {
145+
protected void addInterfaces(List<Schema> schemas, CodegenModel codegenModel, Map<String, CodegenModel> allModels) {
146146
for (Schema interfaceSchema : schemas) {
147147
final String ref = interfaceSchema.get$ref();
148148
if (StringUtils.isBlank(ref)) {

src/main/java/io/swagger/codegen/v3/generators/html/HtmlSchemaHandler.java

Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,17 @@
33
import io.swagger.codegen.v3.CodegenModel;
44
import io.swagger.codegen.v3.CodegenModelFactory;
55
import io.swagger.codegen.v3.CodegenModelType;
6+
import io.swagger.codegen.v3.CodegenProperty;
67
import io.swagger.codegen.v3.generators.DefaultCodegenConfig;
78
import io.swagger.codegen.v3.generators.SchemaHandler;
9+
import io.swagger.codegen.v3.generators.util.OpenAPIUtil;
810
import io.swagger.v3.oas.models.media.ArraySchema;
911
import io.swagger.v3.oas.models.media.ComposedSchema;
1012
import io.swagger.v3.oas.models.media.Schema;
13+
import org.apache.commons.lang3.StringUtils;
1114

15+
import java.util.ArrayList;
16+
import java.util.List;
1217
import java.util.Map;
1318

1419
public class HtmlSchemaHandler extends SchemaHandler {
@@ -17,8 +22,49 @@ public HtmlSchemaHandler(DefaultCodegenConfig codegenConfig) {
1722
super(codegenConfig);
1823
}
1924

20-
@Override
21-
public void processComposedSchemas(CodegenModel codegenModel, Schema schema, Map<String, CodegenModel> allModels) {
22-
// no ops for html generator
25+
protected void processComposedSchema(CodegenModel codegenModel, ComposedSchema composedSchema, Map<String, CodegenModel> allModels) {
26+
List<Schema> schemas = composedSchema.getOneOf();
27+
CodegenModel composedModel = this.createComposedModel(ONE_OF_PREFFIX + codegenModel.getName(), schemas);
28+
if (composedModel == null) {
29+
schemas = composedSchema.getAnyOf();
30+
composedModel = this.createComposedModel(ANY_OF_PREFFIX + codegenModel.getName(), schemas);
31+
if (composedModel == null) {
32+
return;
33+
}
34+
}
35+
this.addInterfaceModel(codegenModel, composedModel);
36+
this.addInterfaces(schemas, composedModel, allModels);
37+
38+
if (composedModel.getName().startsWith(ONE_OF_PREFFIX)) {
39+
codegenModel.vendorExtensions.put("oneOf-model", composedModel);
40+
} else if (composedModel.getName().startsWith(ONE_OF_PREFFIX)) {
41+
codegenModel.vendorExtensions.put("anyOf-model", composedModel);
42+
}
43+
}
44+
45+
protected void processComposedSchema(String codegenModelName, CodegenProperty codegenProperty, ComposedSchema composedSchema, Map<String, CodegenModel> allModels) {
46+
List<Schema> schemas = composedSchema.getOneOf();
47+
CodegenModel composedModel = this.createComposedModel(ONE_OF_PREFFIX + codegenModelName, schemas);
48+
if (composedModel == null) {
49+
schemas = composedSchema.getAnyOf();
50+
composedModel = this.createComposedModel(ANY_OF_PREFFIX + codegenModelName, schemas);
51+
if (composedModel == null) {
52+
return;
53+
}
54+
}
55+
if (composedModel.getName().startsWith(ONE_OF_PREFFIX)) {
56+
codegenProperty.vendorExtensions.put("oneOf-model", composedModel);
57+
58+
} else if (composedModel.getName().startsWith(ONE_OF_PREFFIX)) {
59+
codegenProperty.vendorExtensions.put("anyOf-model", composedModel);
60+
}
61+
final List<String> modelNames = new ArrayList<>();
62+
for (Schema interfaceSchema : schemas) {
63+
if (StringUtils.isNotBlank(interfaceSchema.get$ref())) {
64+
String schemaName = OpenAPIUtil.getSimpleRef(interfaceSchema.get$ref());
65+
modelNames.add(codegenConfig.toModelName(schemaName));
66+
}
67+
}
68+
composedModel.vendorExtensions.put("x-model-names", modelNames);
2369
}
2470
}

0 commit comments

Comments
 (0)