Skip to content

Commit de3356f

Browse files
authored
Merge pull request #2203 from swagger-api/fix-ref-parsing-dot-in-components-name
fix $ref parsing when it contains dot inside component name
2 parents bb286a7 + c14ac3e commit de3356f

File tree

8 files changed

+111
-10
lines changed

8 files changed

+111
-10
lines changed

modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/ExternalRefProcessor.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -794,7 +794,6 @@ public String processRefToExternalParameter(String $ref, RefFormat refFormat) {
794794
if(renamedRef != null) {
795795
return renamedRef;
796796
}
797-
798797
final Parameter parameter = cache.loadRef($ref, refFormat, Parameter.class);
799798

800799
if(parameter == null) {

modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/ParameterProcessor.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,9 @@ public void processParameter(Parameter parameter) {
4343
if($ref != null){
4444
RefFormat refFormat = computeRefFormat(parameter.get$ref());
4545
if (isAnExternalRefFormat(refFormat)){
46-
final String newRef = externalRefProcessor.processRefToExternalParameter($ref, refFormat);
46+
String newRef = externalRefProcessor.processRefToExternalParameter($ref, refFormat);
4747
if (newRef != null) {
48+
newRef = "#/components/parameters/" + newRef;
4849
parameter.set$ref(newRef);
4950
}
5051
}
@@ -75,11 +76,9 @@ public void processParameter(Parameter parameter) {
7576
}
7677

7778
public List<Parameter> processParameters(List<Parameter> parameters) {
78-
7979
if (parameters == null) {
8080
return null;
8181
}
82-
8382
final List<Parameter> processedPathLevelParameters = new ArrayList<>();
8483
final List<Parameter> refParameters = new ArrayList<>();
8584

@@ -92,7 +91,6 @@ public List<Parameter> processParameters(List<Parameter> parameters) {
9291
//result.warning(location, "The parameter should use Reference Object to link to parameters that are defined at the OpenAPI Object's components/parameters.");
9392
continue;
9493
}
95-
9694
if(resolvedParameter == null) {
9795
// can't resolve it!
9896
processedPathLevelParameters.add(parameter);

modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/PathsProcessor.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,8 @@ public void processPaths() {
6565
PathItem pathItem = pathMap.get(pathStr);
6666

6767
if (pathItem.get$ref() != null) {
68-
6968
PathItem resolvedPath = processReferencePath(pathItem);
70-
7169
String pathRef = pathItem.get$ref().split("#")[0];
72-
7370
if (resolvedPath != null) {
7471
updateRefs(resolvedPath, pathRef);
7572
//we need to put the resolved path into swagger object
@@ -84,7 +81,6 @@ public void processPaths() {
8481
final List<Parameter> processedPathParameters = parameterProcessor.processParameters(pathItem.getParameters());
8582
pathItem.setParameters(processedPathParameters);
8683

87-
8884
final Map<PathItem.HttpMethod, Operation> operationMap = pathItem.readOperationsMap();
8985

9086
for (PathItem.HttpMethod httpMethod : operationMap.keySet()) {

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

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import java.util.Set;
88
import java.util.stream.Collectors;
99

10+
11+
import io.swagger.v3.parser.core.models.SwaggerParseResult;
1012
import org.junit.Before;
1113
import org.junit.Test;
1214
import org.testng.Assert;
@@ -33,6 +35,31 @@ public void parseOASSpec() {
3335
options.setResolve(true);
3436
oas = new OpenAPIV3Parser().read("oas3-refs-test/openapi.json", null, options);
3537
}
38+
39+
@Test
40+
public void testRefContainingDot() {
41+
ParseOptions options = new ParseOptions();
42+
options.setResolve(true);
43+
SwaggerParseResult result = new OpenAPIV3Parser().readLocation("resolve-dot-containing-ref/standaloneSpec.yaml", null, options);
44+
45+
Assert.assertNotNull(result.getOpenAPI());
46+
Assert.assertTrue(result.getMessages().isEmpty(), "No error messages should be present");
47+
Assert.assertNotNull(result.getOpenAPI().getPaths().get("/endpoint").getGet().getParameters());
48+
Assert.assertEquals(result.getOpenAPI().getPaths().get("/endpoint").getGet().getParameters().get(0).getName(), "FbtPrincipalIdentity");
49+
}
50+
51+
@Test
52+
public void testExternalRefContainingDot() {
53+
ParseOptions options = new ParseOptions();
54+
options.setResolve(true);
55+
SwaggerParseResult result = new OpenAPIV3Parser().readLocation("resolve-dot-containing-ref/externalRefSpec.yaml", null, options);
56+
57+
Assert.assertNotNull(result.getOpenAPI());
58+
Assert.assertTrue(result.getMessages().isEmpty(), "No error messages should be present");
59+
Assert.assertNotNull(result.getOpenAPI().getPaths().get("/endpoint").getGet().getParameters());
60+
Assert.assertEquals(result.getOpenAPI().getPaths().get("/endpoint").getGet().getParameters().get(0).getName(), "FbtPrincipalIdentity");
61+
}
62+
3663
@Test
3764
public void testParameterExampleRefProcessed() {
3865
String paramName = "correlation_id";
@@ -85,3 +112,4 @@ public void testComposedArrayItemsRef() {
85112
assertEquals(adopterAlias.getItems().getAllOf().size(), 2, "Processed schemas items");
86113
}
87114
}
115+
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
openapi: 3.0.0
2+
info:
3+
title: Test domain
4+
description: Domain for testing
5+
version: '1.0.0'
6+
components:
7+
parameters:
8+
FbtPrincipalIdentity_V3.1:
9+
name: FbtPrincipalIdentity
10+
in: query
11+
schema:
12+
type: string
13+
FbtPrincipalIdentity_V31:
14+
name: FbtPrincipalIdentity
15+
in: query
16+
schema:
17+
type: string
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
openapi: 3.0.0
2+
info:
3+
title: Test API
4+
version: 1.0.0
5+
description: Test API with dot-containing $ref
6+
paths:
7+
/endpoint:
8+
get:
9+
summary: summary
10+
operationId: id
11+
description: Test description
12+
parameters:
13+
- $ref: 'resolve-dot-containing-ref/externalRefDomain.yaml#/components/parameters/FbtPrincipalIdentity_V3.1'
14+
responses:
15+
'200':
16+
description: get description
17+
content:
18+
application/json:
19+
schema:
20+
type: array
21+
items:
22+
$ref: '#/components/schemas/item'
23+
components:
24+
schemas:
25+
item:
26+
type: object
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
openapi: 3.0.0
2+
info:
3+
title: Test API
4+
version: 1.0.0
5+
description: Test API with dot-containing $ref
6+
paths:
7+
/endpoint:
8+
get:
9+
summary: summary
10+
operationId: id
11+
description: Test description
12+
parameters:
13+
- $ref: '#/components/parameters/FbtPrincipalIdentity_V3.1'
14+
responses:
15+
'200':
16+
description: get description
17+
content:
18+
application/json:
19+
schema:
20+
type: array
21+
items:
22+
$ref: '#/components/schemas/item'
23+
components:
24+
parameters:
25+
FbtPrincipalIdentity_V3.1:
26+
name: FbtPrincipalIdentity
27+
in: query
28+
schema:
29+
type: string
30+
FbtPrincipalIdentity_V31:
31+
name: FbtPrincipalIdentity
32+
in: query
33+
schema:
34+
type: string
35+
schemas:
36+
item:
37+
type: object

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,7 @@
372372
<swagger-parser-v2-version>1.0.75</swagger-parser-v2-version>
373373
<commons-io-version>2.19.0</commons-io-version>
374374
<slf4j-version>2.0.9</slf4j-version>
375-
<swagger-core-version>2.2.32</swagger-core-version>
375+
<swagger-core-version>2.2.34</swagger-core-version>
376376
<swagger-core-v2-version>1.6.16</swagger-core-v2-version>
377377
<junit-version>4.13.2</junit-version>
378378
<testng-version>7.11.0</testng-version>

0 commit comments

Comments
 (0)