Skip to content

Commit 1f9130c

Browse files
authored
Merge pull request #1453 from r-sreesaran/issue-1419
Fix for issue-1419
2 parents 91866d9 + 0a6bc80 commit 1f9130c

File tree

3 files changed

+181
-1
lines changed

3 files changed

+181
-1
lines changed

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2285,7 +2285,12 @@ public Schema getSchema(ObjectNode node, String location, ParseResult result){
22852285
catch( ParseException e) {
22862286
result.invalidType( location, String.format( "enum=`%s`", e.getMessage()), schema.getFormat(), n);
22872287
}
2288-
} else {
2288+
} else if (n.isArray()) {
2289+
for (JsonNode n1 : (ArrayNode)n) {
2290+
schema.addEnumItemObject(String.valueOf(n1));
2291+
}
2292+
}
2293+
else {
22892294
result.invalidType(location, "enum", "value", n);
22902295
}
22912296
}

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2617,4 +2617,21 @@ public void testDiscriminatorSeparateFileExternalMapping() throws Exception {
26172617
Assert.assertNotNull(cat);
26182618
}
26192619

2620+
@Test
2621+
public void testParser() {
2622+
2623+
OpenAPIV3Parser parser = new OpenAPIV3Parser();
2624+
ParseOptions options = new ParseOptions();
2625+
options.setResolve(Boolean.TRUE);
2626+
final SwaggerParseResult result = parser.readLocation("src/test/resources/issue-1419.yaml", null, options);
2627+
System.out.println(result.getMessages());
2628+
Assert.assertNotNull(result);
2629+
ArraySchema schema = (ArraySchema) result.getOpenAPI().getComponents().getSchemas().get("Vehicle").getProperties().get("arrayG");
2630+
ArraySchema schema1 = (ArraySchema) schema.getItems();
2631+
ArrayList enum1 = (ArrayList) schema1.getEnum();
2632+
2633+
Assert.assertEquals(enum1.get(0),"[[1,2],[2,6]]");
2634+
2635+
}
2636+
26202637
}
Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
{
2+
"openapi": "3.0.0",
3+
"servers": [{
4+
"description": "Production environment",
5+
"url": "https://driver-vehicle-licensing.api.gov.uk/vehicle-enquiry"
6+
},
7+
{
8+
"description": "Test environment",
9+
"url": "https://uat.driver-vehicle-licensing.api.gov.uk/vehicle-enquiry"
10+
}
11+
],
12+
"info": {
13+
"contact": {
14+
"email": "[email protected]",
15+
"name": "DVLA API Team",
16+
"x-twitter": "GDSTeam"
17+
},
18+
"description": "Interface specification for the DVLA Vehicle Enquiry API",
19+
"title": "Vehicle Enquiry",
20+
"version": "1.1.0",
21+
"x-apisguru-categories": [
22+
"open_data"
23+
],
24+
"x-logo": {
25+
"url": "https://api.apis.guru/v2/cache/logo/https_twitter.com_GDSTeam_profile_image.png"
26+
},
27+
"x-origin": [{
28+
"format": "openapi",
29+
"url": "https://developer-portal.driver-vehicle-licensing.api.gov.uk/apis/vehicle-enquiry-service/v1.1.0-vehicle-enquiry-service.json",
30+
"version": "3.0"
31+
}],
32+
"x-preferred": true,
33+
"x-providerName": "api.gov.uk",
34+
"x-serviceName": "vehicle-enquiry"
35+
},
36+
"tags": [{
37+
"name": "vehicle"
38+
}],
39+
"paths": {
40+
"/v1/vehicles": {
41+
"post": {
42+
"description": "Returns vehicle details based on registration number",
43+
"operationId": "getVehicleDetailsByRegistrationNumber",
44+
"parameters": [{
45+
"description": "Client Specific API Key",
46+
"in": "header",
47+
"name": "x-api-key",
48+
"required": true,
49+
"schema": {
50+
"type": "string"
51+
}
52+
},
53+
{
54+
"description": "Consumer Correlation ID",
55+
"in": "header",
56+
"name": "X-Correlation-Id",
57+
"required": false,
58+
"schema": {
59+
"type": "string"
60+
}
61+
}
62+
],
63+
"requestBody": {
64+
"content": {
65+
"application/json": {
66+
"schema": {
67+
"$ref": "#/components/schemas/Vehicle"
68+
}
69+
}
70+
},
71+
"description": "Registration number of the vehicle to find details for",
72+
"required": true
73+
},
74+
"responses": {
75+
"200": {
76+
"content": {
77+
"application/json": {
78+
79+
}
80+
},
81+
"description": "Successful response"
82+
},
83+
"400": {
84+
85+
"description": "Bad Request"
86+
}
87+
},
88+
"summary": "Get vehicle details by registration number",
89+
"tags": [
90+
"vehicle"
91+
]
92+
}
93+
}
94+
},
95+
"components": {
96+
"schemas": {
97+
98+
"Vehicle": {
99+
"properties": {
100+
"arrayA": {
101+
"type": "array",
102+
"items": {
103+
104+
}
105+
},
106+
107+
"arrayG": {
108+
"type": "array",
109+
"items": {
110+
"type": "array",
111+
"items": {
112+
"type": "integer",
113+
"format": "int32",
114+
"minimum": 12,
115+
"maximum": 24,
116+
"nullable": true,
117+
"exclusiveMinimum": true,
118+
"exclusiveMaximum": true,
119+
"enum": [1, 2],
120+
"default": 1
121+
122+
},
123+
"enum": [
124+
[
125+
[
126+
[1, 2],
127+
[2, 6]
128+
]
129+
]
130+
]
131+
}
132+
},
133+
"arrayH": {
134+
"type": "array",
135+
"items": {
136+
"type": "array",
137+
"items": {
138+
"type": "string",
139+
"nullable": true,
140+
"enum": ["1", "2"]
141+
142+
},
143+
"enum": [
144+
["1", "2"],
145+
["3", "2"]
146+
]
147+
}
148+
149+
150+
151+
152+
153+
}
154+
}
155+
}
156+
}
157+
}
158+
}

0 commit comments

Comments
 (0)