Skip to content

Commit cc0795f

Browse files
committed
allow non type schema with properties be handle as object schema on flatten process.
1 parent c229638 commit cc0795f

File tree

1 file changed

+56
-61
lines changed

1 file changed

+56
-61
lines changed

modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/InlineModelResolver.java

Lines changed: 56 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,11 @@ public void flatten(OpenAPI openAPI) {
7474
ArraySchema am = (ArraySchema) model;
7575
Schema inner = am.getItems();
7676

77-
if (inner instanceof ObjectSchema) {
78-
ObjectSchema op = (ObjectSchema) inner;
79-
if (op.getProperties() != null && op.getProperties().size() > 0) {
80-
flattenProperties(op.getProperties(), pathname);
81-
String modelName = resolveModelName(op.getTitle(), "body");
82-
Schema innerModel = createModelFromProperty(op, modelName);
77+
if (isObjectSchema(inner)) {
78+
if (inner.getProperties() != null && inner.getProperties().size() > 0) {
79+
flattenProperties(inner.getProperties(), pathname);
80+
String modelName = resolveModelName(inner.getTitle(), "body");
81+
Schema innerModel = createModelFromProperty(inner, modelName);
8382
String existing = matchGenerated(innerModel);
8483
if (existing != null) {
8584
am.setItems(new Schema().$ref(existing));
@@ -115,12 +114,11 @@ public void flatten(OpenAPI openAPI) {
115114
ArraySchema am = (ArraySchema) model;
116115
Schema inner = am.getItems();
117116

118-
if (inner instanceof ObjectSchema) {
119-
ObjectSchema op = (ObjectSchema) inner;
120-
if (op.getProperties() != null && op.getProperties().size() > 0) {
121-
flattenProperties(op.getProperties(), pathname);
122-
String modelName = resolveModelName(op.getTitle(), parameter.getName());
123-
Schema innerModel = createModelFromProperty(op, modelName);
117+
if (isObjectSchema(inner)) {
118+
if (inner.getProperties() != null && inner.getProperties().size() > 0) {
119+
flattenProperties(inner.getProperties(), pathname);
120+
String modelName = resolveModelName(inner.getTitle(), parameter.getName());
121+
Schema innerModel = createModelFromProperty(inner, modelName);
124122
String existing = matchGenerated(innerModel);
125123
if (existing != null) {
126124
am.setItems(new Schema().$ref(existing));
@@ -145,30 +143,28 @@ public void flatten(OpenAPI openAPI) {
145143
if (content.get(name) != null) {
146144
MediaType media = content.get(name);
147145
if (media.getSchema() != null) {
148-
Schema property = media.getSchema();
149-
if (property instanceof ObjectSchema) {
150-
ObjectSchema op = (ObjectSchema) property;
151-
if (op.getProperties() != null && op.getProperties().size() > 0) {
152-
String modelName = resolveModelName(op.getTitle(), "inline_response_" + key);
153-
Schema model = createModelFromProperty(op, modelName);
146+
Schema mediaSchema = media.getSchema();
147+
if (isObjectSchema(mediaSchema)) {
148+
if (mediaSchema.getProperties() != null && mediaSchema.getProperties().size() > 0) {
149+
String modelName = resolveModelName(mediaSchema.getTitle(), "inline_response_" + key);
150+
Schema model = createModelFromProperty(mediaSchema, modelName);
154151
String existing = matchGenerated(model);
155152
if (existing != null) {
156-
media.setSchema(this.makeRefProperty(existing, property));
153+
media.setSchema(this.makeRefProperty(existing, mediaSchema));
157154
} else {
158-
media.setSchema(this.makeRefProperty(modelName, property));
155+
media.setSchema(this.makeRefProperty(modelName, mediaSchema));
159156
addGenerated(modelName, model);
160157
openAPI.getComponents().addSchemas(modelName, model);
161158
}
162159
}
163-
} else if (property instanceof ArraySchema) {
164-
ArraySchema ap = (ArraySchema) property;
160+
} else if (mediaSchema instanceof ArraySchema) {
161+
ArraySchema ap = (ArraySchema) mediaSchema;
165162
Schema inner = ap.getItems();
166163

167-
if (inner instanceof ObjectSchema) {
168-
ObjectSchema op = (ObjectSchema) inner;
169-
if (op.getProperties() != null && op.getProperties().size() > 0) {
170-
flattenProperties(op.getProperties(), pathname);
171-
String modelName = resolveModelName(op.getTitle(),
164+
if (isObjectSchema(inner)) {
165+
if (inner.getProperties() != null && inner.getProperties().size() > 0) {
166+
flattenProperties(inner.getProperties(), pathname);
167+
String modelName = resolveModelName(inner.getTitle(),
172168
"inline_response_" + key);
173169
Schema innerModel = createModelFromProperty(inner, modelName);
174170
String existing = matchGenerated(innerModel);
@@ -181,21 +177,20 @@ public void flatten(OpenAPI openAPI) {
181177
}
182178
}
183179
}
184-
} else if (property.getAdditionalProperties() != null && property.getAdditionalProperties() instanceof Schema) {
185-
186-
Schema innerProperty = (Schema) property.getAdditionalProperties();
187-
if (innerProperty instanceof ObjectSchema) {
188-
ObjectSchema op = (ObjectSchema) innerProperty;
189-
if (op.getProperties() != null && op.getProperties().size() > 0) {
190-
flattenProperties(op.getProperties(), pathname);
191-
String modelName = resolveModelName(op.getTitle(),
180+
} else if (mediaSchema.getAdditionalProperties() != null && mediaSchema.getAdditionalProperties() instanceof Schema) {
181+
182+
Schema innerProperty = (Schema) mediaSchema.getAdditionalProperties();
183+
if (isObjectSchema(innerProperty)) {
184+
if (innerProperty.getProperties() != null && innerProperty.getProperties().size() > 0) {
185+
flattenProperties(innerProperty.getProperties(), pathname);
186+
String modelName = resolveModelName(innerProperty.getTitle(),
192187
"inline_response_" + key);
193-
Schema innerModel = createModelFromProperty(op, modelName);
188+
Schema innerModel = createModelFromProperty(innerProperty, modelName);
194189
String existing = matchGenerated(innerModel);
195190
if (existing != null) {
196-
property.setAdditionalProperties(new Schema().$ref(existing));
191+
mediaSchema.setAdditionalProperties(new Schema().$ref(existing));
197192
} else {
198-
property.setAdditionalProperties(new Schema().$ref(modelName));
193+
mediaSchema.setAdditionalProperties(new Schema().$ref(modelName));
199194
addGenerated(modelName, innerModel);
200195
openAPI.getComponents().addSchemas(modelName, innerModel);
201196
}
@@ -224,11 +219,10 @@ public void flatten(OpenAPI openAPI) {
224219
} else if (model instanceof ArraySchema) {
225220
ArraySchema m = (ArraySchema) model;
226221
Schema inner = m.getItems();
227-
if (inner instanceof ObjectSchema) {
228-
ObjectSchema op = (ObjectSchema) inner;
229-
if (op.getProperties() != null && op.getProperties().size() > 0) {
230-
String innerModelName = resolveModelName(op.getTitle(), modelName + "_inner");
231-
Schema innerModel = createModelFromProperty(op, innerModelName);
222+
if (isObjectSchema(inner)) {
223+
if (inner.getProperties() != null && inner.getProperties().size() > 0) {
224+
String innerModelName = resolveModelName(inner.getTitle(), modelName + "_inner");
225+
Schema innerModel = createModelFromProperty(inner, innerModelName);
232226
String existing = matchGenerated(innerModel);
233227
if (existing == null) {
234228
openAPI.getComponents().addSchemas(innerModelName, innerModel);
@@ -328,13 +322,10 @@ public void flattenProperties(Map<String, Schema> properties, String path) {
328322
Map<String, Schema> modelsToAdd = new HashMap<>();
329323
for (String key : properties.keySet()) {
330324
Schema property = properties.get(key);
331-
if (property instanceof ObjectSchema && ((ObjectSchema) property).getProperties() != null
332-
&& ((ObjectSchema) property).getProperties().size() > 0) {
333-
334-
ObjectSchema op = (ObjectSchema) property;
325+
if (isObjectSchema(property) && property.getProperties() != null && property.getProperties().size() > 0) {
335326

336-
String modelName = resolveModelName(op.getTitle(), path + "_" + key);
337-
Schema model = createModelFromProperty(op, modelName);
327+
String modelName = resolveModelName(property.getTitle(), path + "_" + key);
328+
Schema model = createModelFromProperty(property, modelName);
338329

339330
String existing = matchGenerated(model);
340331

@@ -350,12 +341,11 @@ public void flattenProperties(Map<String, Schema> properties, String path) {
350341
ArraySchema ap = (ArraySchema) property;
351342
Schema inner = ap.getItems();
352343

353-
if (inner instanceof ObjectSchema) {
354-
ObjectSchema op = (ObjectSchema) inner;
355-
if (op.getProperties() != null && op.getProperties().size() > 0) {
356-
flattenProperties(op.getProperties(), path);
357-
String modelName = resolveModelName(op.getTitle(), path + "_" + key);
358-
Schema innerModel = createModelFromProperty(op, modelName);
344+
if (isObjectSchema(inner)) {
345+
if (inner.getProperties() != null && inner.getProperties().size() > 0) {
346+
flattenProperties(inner.getProperties(), path);
347+
String modelName = resolveModelName(inner.getTitle(), path + "_" + key);
348+
Schema innerModel = createModelFromProperty(inner, modelName);
359349
String existing = matchGenerated(innerModel);
360350
if (existing != null) {
361351
ap.setItems(new Schema().$ref(existing));
@@ -369,12 +359,11 @@ public void flattenProperties(Map<String, Schema> properties, String path) {
369359
} else if (property.getAdditionalProperties() != null && property.getAdditionalProperties() instanceof Schema) {
370360
Schema inner = (Schema) property.getAdditionalProperties();
371361

372-
if (inner instanceof ObjectSchema) {
373-
ObjectSchema op = (ObjectSchema) inner;
374-
if (op.getProperties() != null && op.getProperties().size() > 0) {
375-
flattenProperties(op.getProperties(), path);
376-
String modelName = resolveModelName(op.getTitle(), path + "_" + key);
377-
Schema innerModel = createModelFromProperty(op, modelName);
362+
if (isObjectSchema(inner)) {
363+
if (inner.getProperties() != null && inner.getProperties().size() > 0) {
364+
flattenProperties(inner.getProperties(), path);
365+
String modelName = resolveModelName(inner.getTitle(), path + "_" + key);
366+
Schema innerModel = createModelFromProperty(inner, modelName);
378367
String existing = matchGenerated(innerModel);
379368
if (existing != null) {
380369
property.setAdditionalProperties(new Schema().$ref(existing));
@@ -507,4 +496,10 @@ public void setSkipMatches(boolean skipMatches) {
507496
this.skipMatches = skipMatches;
508497
}
509498

499+
private boolean isObjectSchema(Schema schema) {
500+
return schema instanceof ObjectSchema
501+
|| "object".equalsIgnoreCase(schema.getType())
502+
|| (schema.getType() == null && schema.getProperties() != null && !schema.getProperties().isEmpty());
503+
504+
}
510505
}

0 commit comments

Comments
 (0)