Skip to content
This repository was archived by the owner on Nov 24, 2022. It is now read-only.

Commit 832e6a7

Browse files
authored
Merge pull request swagger-api#1173 from swagger-api/issue1169-v3
Fix for multiple path params in a same URI segment of a path
2 parents 506e165 + 02a10d9 commit 832e6a7

3 files changed

Lines changed: 94 additions & 1 deletion

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -546,7 +546,7 @@ public Paths getPaths(ObjectNode obj, String location, ParseResult result) {
546546
}
547547
ObjectNode path = (ObjectNode) pathValue;
548548
PathItem pathObj = getPathItem(path,String.format("%s.'%s'", location,pathName), result);
549-
String[] eachPart = pathName.split("/");
549+
String[] eachPart = pathName.split("[-/.]+");
550550
Arrays.stream(eachPart)
551551
.filter(part -> part.startsWith("{") && part.endsWith("}") && part.length() > 2)
552552
.forEach(part -> {

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,16 @@ public class OpenAPIV3ParserTest {
6767
protected WireMockServer wireMockServer;
6868

6969

70+
@Test
71+
public void testIssue1169() {
72+
ParseOptions options = new ParseOptions();
73+
options.setResolve(true);
74+
SwaggerParseResult parseResult = new OpenAPIV3Parser().readLocation("issue1169.yaml", null, options);
75+
assertTrue(parseResult.getMessages().size() == 0);
76+
OpenAPI apispec = parseResult.getOpenAPI();
77+
assertNotNull(apispec);
78+
}
79+
7080

7181
@Test
7282
public void testIssue339() throws Exception {
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
---
2+
openapi: 3.0.0
3+
servers:
4+
- description: Production
5+
url: https://apps.gov.bc.ca/pub/bcgnws
6+
- description: Test
7+
url: https://test.apps.gov.bc.ca/pub/bcgnws
8+
- description: Delivery
9+
url: https://delivery.apps.gov.bc.ca/pub/bcgnws
10+
info:
11+
contact:
12+
email: geographical.names@gov.bc.ca
13+
name: BC Geographical Names Office
14+
url: https://www2.gov.bc.ca/gov/content?id=A3C60F17CE934B1ABFA366F28C66E370
15+
description: "This REST API provides searchable access to information about geographical
16+
names in the province of British Columbia, including name status and details about
17+
the corresponding geographic feature. \n\nPlease note that you may experience
18+
issues when submitting requests to the delivery or test environment if using this
19+
[OpenAPI specification](https://github.com/bcgov/api-specs) in other API console
20+
viewers."
21+
license:
22+
name: Crown Copyright
23+
url: https://www2.gov.bc.ca/gov/content?id=1AAACC9C65754E4D89A118B875E0FBDA
24+
title: BC Geographical Names Web Service -
25+
version: 3.x.x
26+
x-apisguru-categories:
27+
- open_data
28+
x-logo:
29+
url: https://api.apis.guru/v2/cache/logo/https_avatars1.githubusercontent.com_u_916280.jpeg
30+
x-origin:
31+
- converter:
32+
url: https://github.com/lucybot/api-spec-converter
33+
version: 2.7.31
34+
format: openapi
35+
url: https://raw.githubusercontent.com/bcgov/api-specs/master/bcgnws/bcgnws.json
36+
version: '3.0'
37+
x-preferred: true
38+
x-providerName: gov.bc.ca
39+
x-serviceName: bcgnws
40+
tags:
41+
- name: search
42+
- name: name
43+
- name: feature
44+
- name: feature taxonomy
45+
- name: name authority
46+
paths:
47+
"/names/{nameId}.{outputFormat}":
48+
get:
49+
description: Get information about the geographical name with the specified
50+
nameId.
51+
parameters:
52+
- description: The unique identifier for a name
53+
example: 22474
54+
in: path
55+
name: nameId
56+
required: true
57+
schema:
58+
type: integer
59+
- description: The format of the output.
60+
example: json
61+
in: path
62+
name: outputFormat
63+
required: true
64+
schema:
65+
default: json
66+
enum:
67+
- json
68+
- xml
69+
- kml
70+
- csv
71+
- html
72+
type: string
73+
responses:
74+
'200':
75+
description: Information about the name with the specified nameId
76+
'404':
77+
description: The name with the given nameId doesn't exist, or the output
78+
format is invalid.
79+
summary: Get a name by its nameId
80+
tags:
81+
- name
82+
components:
83+
schemas: {}

0 commit comments

Comments
 (0)