Skip to content

Commit cfedf94

Browse files
authored
Merge pull request #1092 from jmini/issue1090
Fix for issue #1090
2 parents 0e2db47 + 74bb0ad commit cfedf94

File tree

3 files changed

+76
-8
lines changed

3 files changed

+76
-8
lines changed

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

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2260,14 +2260,16 @@ public Schema getSchema(ObjectNode node, String location, ParseResult result){
22602260
}
22612261

22622262
value = getString("type",node,false,location,result);
2263-
if (StringUtils.isNotBlank(value) && StringUtils.isBlank(schema.getType())) {
2264-
schema.setType(value);
2265-
}else{
2266-
// may have an enum where type can be inferred
2267-
JsonNode enumNode = node.get("enum");
2268-
if(enumNode != null && enumNode.isArray()) {
2269-
String type = inferTypeFromArray((ArrayNode) enumNode);
2270-
schema.setType(type);
2263+
if (StringUtils.isBlank(schema.getType())) {
2264+
if (StringUtils.isNotBlank(value)) {
2265+
schema.setType(value);
2266+
}else{
2267+
// may have an enum where type can be inferred
2268+
JsonNode enumNode = node.get("enum");
2269+
if(enumNode != null && enumNode.isArray()) {
2270+
String type = inferTypeFromArray((ArrayNode) enumNode);
2271+
schema.setType(type);
2272+
}
22712273
}
22722274
}
22732275

modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/util/OpenAPIDeserializerTest.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -855,6 +855,35 @@ public void testDeserializeEnum() {
855855
assertEquals(numberImpl.getDefault(), new BigDecimal("3.14"));
856856
}
857857

858+
@Test
859+
public void testEnumType() {
860+
ParseOptions options = new ParseOptions();
861+
options.setResolve(true);
862+
SwaggerParseResult result = new OpenAPIV3Parser().readLocation("./src/test/resources/issue-1090.yaml", null, options);
863+
assertNotNull(result.getOpenAPI());
864+
OpenAPI openAPI = result.getOpenAPI();
865+
866+
Schema someObj = openAPI.getComponents().getSchemas().get("SomeObj");
867+
assertNotNull(someObj);
868+
869+
Map<String, Schema> properties = someObj.getProperties();
870+
assertNotNull(properties);
871+
872+
Schema iprop = properties.get("iprop");
873+
assertNotNull(iprop);
874+
assertEquals(iprop.getType(), "integer");
875+
assertEquals(iprop.getFormat(), "int32");
876+
877+
Schema lprop = properties.get("lprop");
878+
assertNotNull(lprop);
879+
assertEquals(lprop.getType(), "integer");
880+
assertEquals(lprop.getFormat(), "int64");
881+
882+
Schema nprop = properties.get("nprop");
883+
assertNotNull(nprop);
884+
assertEquals(nprop.getType(), "number");
885+
}
886+
858887
@Test
859888
public void testDeserializeDateString() {
860889
String yaml = "openapi: 3.0.0\n" +
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
openapi: 3.0.1
2+
info:
3+
title: Object with enum test
4+
description: Issue 1090
5+
version: '1.0'
6+
servers:
7+
- url: 'http://localhost:9999/'
8+
paths:
9+
/ping:
10+
get:
11+
operationId: pingGet
12+
responses:
13+
'201':
14+
description: OK
15+
components:
16+
schemas:
17+
SomeObj:
18+
type: object
19+
properties:
20+
iprop:
21+
type: integer
22+
format: int32
23+
enum:
24+
- 1
25+
- 2
26+
lprop:
27+
type: integer
28+
format: int64
29+
enum:
30+
- 1
31+
- 2
32+
nprop:
33+
type: number
34+
format: double
35+
enum:
36+
- 1.1
37+
- 1.2

0 commit comments

Comments
 (0)