Skip to content

Commit 1c3e9f8

Browse files
authored
Merge pull request #937 from ymohdriz/branch_issue_800
Fix for issue 936
2 parents 4c7568c + 4d701b2 commit 1c3e9f8

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
@@ -187,19 +187,7 @@ public void resolvePath(PathItem pathItem){
187187
}
188188
}
189189

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

204192
Map<String, Link> links = response.getLinks();
205193
if (links != null) {
@@ -214,6 +202,22 @@ public void resolvePath(PathItem pathItem){
214202
}
215203
}
216204

205+
private void resolveHeaders(Map<String, Header> headers) {
206+
if (headers == null || headers.isEmpty()) {
207+
return;
208+
}
209+
for (Map.Entry<String, Header> header : headers.entrySet()) {
210+
Header value = header.getValue();
211+
Header resolvedValue = value.get$ref() != null ? resolveHeader(value) : value;
212+
Map<String, Example> examples = resolvedValue.getExamples();
213+
if(examples != null) {
214+
Map<String,Example> resolved = resolveExample(examples);
215+
resolvedValue.setExamples(resolved);
216+
}
217+
header.setValue(resolvedValue);
218+
}
219+
}
220+
217221
public Header resolveHeader(Header header){
218222
RefFormat refFormat = computeRefFormat(header.get$ref());
219223
String $ref = header.get$ref();
@@ -232,7 +236,12 @@ public Link resolveLink(Link link){
232236
if (!isAnExternalRefFormat(refFormat)){
233237
if (links != null && !links.isEmpty()) {
234238
String referenceKey = computeDefinitionName($ref);
235-
return links.getOrDefault(referenceKey, link);
239+
Link link1 = links.getOrDefault(referenceKey, link);
240+
if (link1 == null) {
241+
return null;
242+
}
243+
resolveHeaders(link1.getHeaders());
244+
return link1;
236245
}
237246
}
238247
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
@@ -1613,8 +1613,10 @@ public void testIssue884() {
16131613
parseOptions.setResolveFully(true);
16141614
OpenAPI openAPI = new OpenAPIV3Parser().read("src/test/resources/issue_884.yaml", null, parseOptions);
16151615
Map<String, Link> links = openAPI.getPaths().get("/2.0/repositories/{username}").getGet().getResponses().get("200").getLinks();
1616-
String operationId = links.get("userRepository").getOperationId();
1616+
Link userRepository = links.get("userRepository");
1617+
String operationId = userRepository.getOperationId();
16171618
assertEquals(operationId, "getRepository");
1619+
assertNotNull(userRepository.getHeaders());
16181620
}
16191621

16201622
@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)