|
24 | 24 | import io.swagger.v3.oas.models.media.DateTimeSchema; |
25 | 25 | import io.swagger.v3.oas.models.media.Discriminator; |
26 | 26 | import io.swagger.v3.oas.models.media.Encoding; |
| 27 | +import io.swagger.v3.oas.models.media.MapSchema; |
27 | 28 | import io.swagger.v3.oas.models.media.MediaType; |
| 29 | +import io.swagger.v3.oas.models.media.ObjectSchema; |
28 | 30 | import io.swagger.v3.oas.models.media.Schema; |
29 | 31 | import io.swagger.v3.oas.models.media.XML; |
30 | 32 | import io.swagger.v3.oas.models.security.OAuthFlow; |
|
49 | 51 | import io.swagger.v3.oas.models.servers.ServerVariables; |
50 | 52 | import io.swagger.v3.parser.core.models.SwaggerParseResult; |
51 | 53 | import io.swagger.v3.core.util.Json; |
52 | | -import io.swagger.v3.core.util.RefUtils; |
53 | 54 |
|
54 | 55 | import org.apache.commons.lang3.StringUtils; |
55 | 56 |
|
@@ -102,7 +103,7 @@ public class OpenAPIDeserializer { |
102 | 103 | private static final String HEADER_PARAMETER = "header"; |
103 | 104 | private static final Pattern RFC3339_DATE_TIME_PATTERN = Pattern.compile( "^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(\\.\\d+)?((Z)|([+-]\\d{2}:\\d{2}))$"); |
104 | 105 | private static final Pattern RFC3339_DATE_PATTERN = Pattern.compile( "^(\\d{4})-(\\d{2})-(\\d{2})$"); |
105 | | - |
| 106 | + private static final String REFERENCE_SEPARATOR = "#/"; |
106 | 107 | private Components components; |
107 | 108 | private final Set<String> operationIDs = new HashSet<>(); |
108 | 109 |
|
@@ -1421,9 +1422,17 @@ public List<Parameter> getParameterList(ArrayNode obj, String location, ParseRes |
1421 | 1422 | } |
1422 | 1423 | Set<String> filter = new HashSet<>(); |
1423 | 1424 |
|
| 1425 | + |
1424 | 1426 | parameters.stream().map(this::getParameterDefinition).forEach(param -> { |
| 1427 | + String ref = param.get$ref(); |
1425 | 1428 | if(!filter.add(param.getName()+"#"+param.getIn())) { |
1426 | | - result.warning(location,"There are duplicate parameter values"); |
| 1429 | + if(ref != null) { |
| 1430 | + if (ref.startsWith(REFERENCE_SEPARATOR)) {// validate if it's inline param also |
| 1431 | + result.warning(location, "There are duplicate parameter values"); |
| 1432 | + } |
| 1433 | + }else{ |
| 1434 | + result.warning(location, "There are duplicate parameter values"); |
| 1435 | + } |
1427 | 1436 | } |
1428 | 1437 | }); |
1429 | 1438 | return parameters; |
@@ -2023,7 +2032,8 @@ public Schema getSchema(ObjectNode node, String location, ParseResult result){ |
2023 | 2032 | ArrayNode allOfArray = getArray("allOf", node, false, location, result); |
2024 | 2033 | ArrayNode anyOfArray = getArray("anyOf", node, false, location, result); |
2025 | 2034 | ObjectNode itemsNode = getObject("items", node, false, location, result); |
2026 | | - |
| 2035 | + ObjectNode additionalPropertiesNode = getObject("additionalProperties", node, false, location, result); |
| 2036 | + Boolean additionalPropertiesBoolean = getBoolean("additionalProperties", node, false, location, result); |
2027 | 2037 |
|
2028 | 2038 |
|
2029 | 2039 | if((allOfArray != null )||(anyOfArray != null)|| (oneOfArray != null)) { |
@@ -2075,6 +2085,32 @@ public Schema getSchema(ObjectNode node, String location, ParseResult result){ |
2075 | 2085 | schema = items; |
2076 | 2086 | } |
2077 | 2087 |
|
| 2088 | + if(additionalPropertiesNode != null) { |
| 2089 | + MapSchema mapSchema = new MapSchema(); |
| 2090 | + if (additionalPropertiesNode.getNodeType().equals(JsonNodeType.OBJECT)) { |
| 2091 | + ObjectNode additionalPropertiesObj = getObject("additionalProperties", node, false, location, result); |
| 2092 | + if (additionalPropertiesObj != null) { |
| 2093 | + Schema additionalProperties = getSchema(additionalPropertiesObj, location, result); |
| 2094 | + if (additionalProperties != null) { |
| 2095 | + mapSchema.setAdditionalProperties(additionalProperties); |
| 2096 | + schema = mapSchema; |
| 2097 | + } |
| 2098 | + } |
| 2099 | + } |
| 2100 | + } else if(additionalPropertiesBoolean != null){ |
| 2101 | + MapSchema mapSchema = new MapSchema(); |
| 2102 | + if (additionalPropertiesBoolean) { |
| 2103 | + mapSchema.setAdditionalProperties(additionalPropertiesBoolean); |
| 2104 | + schema = mapSchema; |
| 2105 | + }else{ |
| 2106 | + ObjectSchema objectSchema = new ObjectSchema(); |
| 2107 | + objectSchema.setAdditionalProperties(additionalPropertiesBoolean); |
| 2108 | + schema = objectSchema; |
| 2109 | + } |
| 2110 | + } |
| 2111 | + |
| 2112 | + |
| 2113 | + |
2078 | 2114 | if (schema == null){ |
2079 | 2115 | schema = SchemaTypeUtil.createSchemaByType(node); |
2080 | 2116 | } |
@@ -2267,24 +2303,6 @@ public Schema getSchema(ObjectNode node, String location, ParseResult result){ |
2267 | 2303 | schema.setProperties(properties); |
2268 | 2304 | } |
2269 | 2305 |
|
2270 | | - |
2271 | | - if (node.get("additionalProperties") != null) { |
2272 | | - if (node.get("additionalProperties").getNodeType().equals(JsonNodeType.OBJECT)) { |
2273 | | - ObjectNode additionalPropertiesObj = getObject("additionalProperties", node, false, location, result); |
2274 | | - if (additionalPropertiesObj != null) { |
2275 | | - Schema additionalProperties = getSchema(additionalPropertiesObj, location, result); |
2276 | | - if (additionalProperties != null) { |
2277 | | - schema.setAdditionalProperties(additionalProperties); |
2278 | | - } |
2279 | | - } |
2280 | | - } else if (node.get("additionalProperties").getNodeType().equals(JsonNodeType.BOOLEAN)) { |
2281 | | - Boolean additionalProperties = getBoolean("additionalProperties", node, false, location, result); |
2282 | | - if (additionalProperties != null) { |
2283 | | - schema.setAdditionalProperties(additionalProperties); |
2284 | | - } |
2285 | | - |
2286 | | - } |
2287 | | - } |
2288 | 2306 | value = getString("description",node,false,location,result); |
2289 | 2307 | if (StringUtils.isNotBlank(value)) { |
2290 | 2308 | schema.setDescription(value); |
|
0 commit comments