Skip to content

Commit d020ad2

Browse files
authored
Merge pull request #958 from swagger-api/regression-issue-943
Regression issue 943
2 parents 7e32fa6 + 929f9bc commit d020ad2

File tree

3 files changed

+130
-5
lines changed

3 files changed

+130
-5
lines changed

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ public Schema resolveSchema(Schema schema) {
314314
Schema innerProperty = obj.getProperties().get(propertyName);
315315
// reference check
316316
if(schema != innerProperty) {
317-
if(resolvedProperties.get(propertyName) == null && resolvedProperties.get(propertyName) != innerProperty) {
317+
if(resolvedProperties.get(propertyName) == null || resolvedProperties.get(propertyName) != innerProperty) {
318318
LOGGER.debug("avoiding infinite loop");
319319
Schema resolved = resolveSchema(innerProperty);
320320
updated.put(propertyName, resolved);
@@ -354,7 +354,7 @@ public Schema resolveSchema(Schema schema) {
354354
if (resolved.getProperties() != null) {
355355
for (String key : properties.keySet()) {
356356
Schema prop = (Schema) resolved.getProperties().get(key);
357-
if(resolvedProperties.get(key) == null && resolvedProperties.get(key) != prop) {
357+
if(resolvedProperties.get(key) == null || resolvedProperties.get(key) != prop) {
358358
LOGGER.debug("avoiding infinite loop");
359359
Schema resolvedProp = resolveSchema(prop);
360360
model.addProperties(key,resolvedProp );
@@ -402,7 +402,7 @@ public Schema resolveSchema(Schema schema) {
402402
if (resolved.getProperties() != null) {
403403
for (String key : properties.keySet()) {
404404
Schema prop = (Schema) resolved.getProperties().get(key);
405-
if(resolvedProperties.get(key) == null && resolvedProperties.get(key) != prop) {
405+
if(resolvedProperties.get(key) == null || resolvedProperties.get(key) != prop) {
406406
LOGGER.debug("avoiding infinite loop");
407407
Schema resolvedProp = resolveSchema(prop);
408408
model.addProperties(key,resolvedProp );
@@ -451,7 +451,7 @@ public Schema resolveSchema(Schema schema) {
451451
if (resolved.getProperties() != null) {
452452
for (String key : properties.keySet()) {
453453
Schema prop = (Schema) resolved.getProperties().get(key);
454-
if(resolvedProperties.get(key) == null && resolvedProperties.get(key) != prop) {
454+
if(resolvedProperties.get(key) == null || resolvedProperties.get(key) != prop) {
455455
LOGGER.debug("avoiding infinite loop");
456456
Schema resolvedProp = resolveSchema(prop);
457457
model.addProperties(key,resolvedProp );
@@ -507,7 +507,7 @@ public Schema resolveSchema(Schema schema) {
507507
Map<String, Schema> properties = model.getProperties();
508508
for (String propertyName : properties.keySet()) {
509509
Schema property = (Schema) model.getProperties().get(propertyName);
510-
if(resolvedProperties.get(propertyName) == null && resolvedProperties.get(propertyName) != property) {
510+
if(resolvedProperties.get(propertyName) == null || resolvedProperties.get(propertyName) != property) {
511511
LOGGER.debug("avoiding infinite loop");
512512
Schema resolved = resolveSchema(property);
513513
updated.put(propertyName, resolved);

modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIResolverTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1166,6 +1166,16 @@ public void recursiveResolving2() {
11661166
}
11671167
}
11681168

1169+
@Test
1170+
public void propertyNameMixup() {
1171+
ParseOptions parseOptions = new ParseOptions();
1172+
parseOptions.setResolveFully(true);
1173+
OpenAPI openAPI = new OpenAPIV3Parser().read("simple.yaml", null, parseOptions);
1174+
assertEquals(((StringSchema)openAPI.getComponents().getSchemas().get("Manufacturer").getProperties().get("name")).getExample(), "ACME Corporation");
1175+
Schema schema = openAPI.getPaths().get("/inventory").getGet().getResponses().get("200").getContent().get("application/json").getSchema();
1176+
assertEquals(((ObjectSchema) ((ArraySchema) schema).getItems().getProperties().get("manufacturer")).getProperties().get("name").getExample(), "ACME Corporation");
1177+
}
1178+
11691179
public String replacePort(String url){
11701180
String pathFile = url.replace("${dynamicPort}", String.valueOf(this.serverPort));
11711181
return pathFile;
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
openapi: 3.0.0
2+
info:
3+
description: This is a simple API
4+
version: "1.0.0"
5+
title: Simple Inventory API
6+
contact:
7+
8+
license:
9+
name: Apache 2.0
10+
url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
11+
tags:
12+
- name: admins
13+
description: Secured Admin-only calls
14+
- name: developers
15+
description: Operations available to regular developers
16+
paths:
17+
/inventory:
18+
get:
19+
tags:
20+
- developers
21+
summary: searches inventory
22+
operationId: searchInventory
23+
description: |
24+
By passing in the appropriate options, you can search for
25+
available inventory in the system
26+
parameters:
27+
- in: query
28+
name: searchString
29+
description: pass an optional search string for looking up inventory
30+
required: false
31+
schema:
32+
type: string
33+
- in: query
34+
name: skip
35+
description: number of records to skip for pagination
36+
schema:
37+
type: integer
38+
format: int32
39+
minimum: 0
40+
- in: query
41+
name: limit
42+
description: maximum number of records to return
43+
schema:
44+
type: integer
45+
format: int32
46+
minimum: 0
47+
maximum: 50
48+
responses:
49+
'200':
50+
description: search results matching criteria
51+
content:
52+
application/json:
53+
schema:
54+
type: array
55+
items:
56+
$ref: '#/components/schemas/InventoryItem'
57+
'400':
58+
description: bad input parameter
59+
post:
60+
tags:
61+
- admins
62+
summary: adds an inventory item
63+
operationId: addInventory
64+
description: Adds an item to the system
65+
responses:
66+
'201':
67+
description: item created
68+
'400':
69+
description: 'invalid input, object invalid'
70+
'409':
71+
description: an existing item already exists
72+
requestBody:
73+
content:
74+
application/json:
75+
schema:
76+
$ref: '#/components/schemas/InventoryItem'
77+
description: Inventory item to add
78+
components:
79+
schemas:
80+
InventoryItem:
81+
type: object
82+
required:
83+
- id
84+
- name
85+
- manufacturer
86+
- releaseDate
87+
properties:
88+
id:
89+
type: string
90+
format: uuid
91+
example: d290f1ee-6c54-4b01-90e6-d701748f0851
92+
name:
93+
type: string
94+
example: Widget Adapter
95+
releaseDate:
96+
type: string
97+
format: date-time
98+
example: '2016-08-29T09:12:33.001Z'
99+
manufacturer:
100+
$ref: '#/components/schemas/Manufacturer'
101+
Manufacturer:
102+
required:
103+
- name
104+
properties:
105+
name:
106+
type: string
107+
example: ACME Corporation
108+
homePage:
109+
type: string
110+
format: url
111+
example: 'https://www.acme-corp.com'
112+
phone:
113+
type: string
114+
example: 408-867-5309
115+
type: object

0 commit comments

Comments
 (0)