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

Commit bec9206

Browse files
committed
Fixed Issue_948
1 parent 5fe31a3 commit bec9206

3 files changed

Lines changed: 128 additions & 1 deletion

File tree

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,11 @@ public List<Parameter> processParameters(List<Parameter> parameters) {
8383
if (parameter.get$ref() != null) {
8484
RefFormat refFormat = computeRefFormat(parameter.get$ref());
8585
final Parameter resolvedParameter = cache.loadRef(parameter.get$ref(), refFormat, Parameter.class);
86+
if (parameter.get$ref().indexOf("#/components/parameters") <= -1) {
87+
//TODO: Not possible to add warning during resolve doesn't accept result as an input. Hence commented below line.
88+
//result.warning(location, "The parameter should use Reference Object to link to parameters that are defined at the OpenAPI Object's components/parameters.");
89+
continue;
90+
}
8691

8792
if(resolvedParameter == null) {
8893
// can't resolve it!
@@ -92,7 +97,7 @@ public List<Parameter> processParameters(List<Parameter> parameters) {
9297
// if the parameter exists, replace it
9398
boolean matched = false;
9499
for(Parameter param : processedPathLevelParameters) {
95-
if(param.getName().equals(resolvedParameter.getName())) {
100+
if(param != null && param.getName() != null && param.getName().equals(resolvedParameter.getName())) {
96101
// ref param wins
97102
matched = true;
98103
break;

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import io.swagger.v3.oas.models.parameters.RequestBody;
3131
import io.swagger.v3.oas.models.responses.ApiResponse;
3232
import io.swagger.v3.oas.models.security.SecurityScheme;
33+
import io.swagger.v3.parser.OpenAPIResolver;
3334
import io.swagger.v3.parser.OpenAPIV3Parser;
3435
import io.swagger.v3.parser.core.models.AuthorizationValue;
3536
import io.swagger.v3.parser.core.models.ParseOptions;
@@ -1608,6 +1609,18 @@ public void testIssue931() {
16081609

16091610
}
16101611

1612+
@Test
1613+
public void testIssue948() {
1614+
ParseOptions options = new ParseOptions();
1615+
options.setResolve(true);
1616+
SwaggerParseResult result = new OpenAPIV3Parser().readLocation("Issue_948.json", null, options);
1617+
new OpenAPIResolver(result.getOpenAPI()).resolve();
1618+
assertNotNull(result.getOpenAPI());
1619+
// assertTrue(result.getMessages().size() > 0);
1620+
// assertEquals(result.getMessages().get(0).contains("doesn't adhere to regular expression ^[a-zA-Z0-9\\.\\-_]+$"), true);
1621+
1622+
}
1623+
16111624
public void shouldParseParameters() {
16121625
ParseOptions parseOptions = new ParseOptions();
16131626
parseOptions.setResolveFully(true);
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
{
2+
"openapi":"3.0.0",
3+
"info":{
4+
"title":"Test",
5+
"description":"Test API",
6+
"version":"1.0"
7+
},
8+
"servers":[
9+
{
10+
"url":"http://localhost:8888/api"
11+
}
12+
],
13+
"paths":{
14+
"/devices":{
15+
"get":{
16+
"tags":[
17+
"devices"
18+
],
19+
"summary":"List all Devices",
20+
"operationId":"getDevices",
21+
"parameters":[
22+
{
23+
"$ref":"#/components/headers/Content-Type"
24+
},
25+
{
26+
"$ref":"#/components/parameters/idFrom"
27+
},
28+
{
29+
"name":"category",
30+
"in":"query",
31+
"description":"A request parameter that matches against the device category.",
32+
"schema":{
33+
"$ref":"#/components/schemas/deviceCategory"
34+
}
35+
},
36+
{
37+
"name":"manufacturer",
38+
"in":"query",
39+
"description":"A request parameter that performs LIKE matching against the device manufacturer.",
40+
"schema":{
41+
"maxLength":200,
42+
"minLength":1,
43+
"type":"string",
44+
"example":"Sony"
45+
}
46+
}
47+
],
48+
"responses":{
49+
"200":{
50+
"description":"An array of devices that match the request parameters requested.",
51+
"content":{
52+
"application/json":{
53+
"schema":{
54+
"type":"object",
55+
"properties":{
56+
"device":{
57+
"$ref":"#/components/schemas/device"
58+
}
59+
}
60+
}
61+
}
62+
}
63+
}
64+
}
65+
}
66+
}
67+
},
68+
"components":{
69+
"schemas":{
70+
"deviceCategory":{
71+
"type":"string",
72+
"description":"The list of avialable viewer device categories.",
73+
"example":"TV",
74+
"enum":[
75+
"TV",
76+
"Phone",
77+
"Tablet",
78+
"Laptop",
79+
"Monitor",
80+
"Other"
81+
]
82+
},
83+
"device":{
84+
"type":"string",
85+
"description":"Captures the possible states for an analysis."
86+
}
87+
},
88+
"parameters":{
89+
"idFrom":{
90+
"name":"idFrom",
91+
"in":"query",
92+
"description":"The lower-bound of a request parameter filtering based on unique object identifier.",
93+
"schema":{
94+
"type":"integer"
95+
}
96+
}
97+
},
98+
"headers":{
99+
"Content-Type":{
100+
"required":true,
101+
"schema":{
102+
"type":"string",
103+
"example":"application/json;charset=UTF-8",
104+
"default":"application/json;charset=UTF-8"
105+
}
106+
}
107+
}
108+
}
109+
}

0 commit comments

Comments
 (0)