Skip to content

Commit 4d701b2

Browse files
committed
Fix for issue 936
Headers in link is not considered in resolve fully
1 parent eab9a28 commit 4d701b2

File tree

3 files changed

+31
-15
lines changed

3 files changed

+31
-15
lines changed

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

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -182,19 +182,7 @@ public void resolvePath(PathItem pathItem){
182182
}
183183
}
184184

185-
Map<String, Header> headers = response.getHeaders();
186-
if (headers != null) {
187-
for (Map.Entry<String, Header> header : headers.entrySet()) {
188-
Header value = header.getValue();
189-
Header resolvedValue = value.get$ref() != null ? resolveHeader(value) : value;
190-
Map<String, Example> examples = resolvedValue.getExamples();
191-
if(examples != null) {
192-
Map<String,Example> resolved = resolveExample(examples);
193-
resolvedValue.setExamples(resolved);
194-
}
195-
header.setValue(resolvedValue);
196-
}
197-
}
185+
resolveHeaders(response.getHeaders());
198186

199187
Map<String, Link> links = response.getLinks();
200188
if (links != null) {
@@ -209,6 +197,22 @@ public void resolvePath(PathItem pathItem){
209197
}
210198
}
211199

200+
private void resolveHeaders(Map<String, Header> headers) {
201+
if (headers == null || headers.isEmpty()) {
202+
return;
203+
}
204+
for (Map.Entry<String, Header> header : headers.entrySet()) {
205+
Header value = header.getValue();
206+
Header resolvedValue = value.get$ref() != null ? resolveHeader(value) : value;
207+
Map<String, Example> examples = resolvedValue.getExamples();
208+
if(examples != null) {
209+
Map<String,Example> resolved = resolveExample(examples);
210+
resolvedValue.setExamples(resolved);
211+
}
212+
header.setValue(resolvedValue);
213+
}
214+
}
215+
212216
public Header resolveHeader(Header header){
213217
RefFormat refFormat = computeRefFormat(header.get$ref());
214218
String $ref = header.get$ref();
@@ -227,7 +231,12 @@ public Link resolveLink(Link link){
227231
if (!isAnExternalRefFormat(refFormat)){
228232
if (links != null && !links.isEmpty()) {
229233
String referenceKey = computeDefinitionName($ref);
230-
return links.getOrDefault(referenceKey, link);
234+
Link link1 = links.getOrDefault(referenceKey, link);
235+
if (link1 == null) {
236+
return null;
237+
}
238+
resolveHeaders(link1.getHeaders());
239+
return link1;
231240
}
232241
}
233242
return link;

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1604,8 +1604,10 @@ public void testIssue884() {
16041604
parseOptions.setResolveFully(true);
16051605
OpenAPI openAPI = new OpenAPIV3Parser().read("src/test/resources/issue_884.yaml", null, parseOptions);
16061606
Map<String, Link> links = openAPI.getPaths().get("/2.0/repositories/{username}").getGet().getResponses().get("200").getLinks();
1607-
String operationId = links.get("userRepository").getOperationId();
1607+
Link userRepository = links.get("userRepository");
1608+
String operationId = userRepository.getOperationId();
16081609
assertEquals(operationId, "getRepository");
1610+
assertNotNull(userRepository.getHeaders());
16091611
}
16101612

16111613
@Test

modules/swagger-parser-v3/src/test/resources/issue_884.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ components:
5050
userRepository:
5151
operationId: getRepository
5252
requestBody: '$response.body#/slug'
53+
headers:
54+
X-Rate-Limit:
55+
description: The number of allowed requests in the current period
56+
schema:
57+
type: integer
5358
schemas:
5459
user:
5560
type: object

0 commit comments

Comments
 (0)