-
Notifications
You must be signed in to change notification settings - Fork 537
Description
The function updateRefs(apiResponse, pathRef) does not update refs for headers in the response whilst it does this correctly for examples and content. As a result relative references in this section cause errors turning the OpenApi spec file into a model as these then get mangled when joined with the base url.
For example:
application.yaml
commonHeaders.yaml
endpoints/
list.yaml
list.yaml would then reference common headers
"200":
description: some text here
headers:
X-CorrelationId:
$ref: '../commonHeaders.yaml#/components/parameters/correlationId'
... <more response definition>
The final url to resolve commonHeaders.yaml looses the last part of the {baseUrl}/../commonHeaders.yaml rather than having {baseUrl}/endpoints/../commonHeaders.yaml
Looking at the code for updateRefs locally we can fix it by changing/adding the following code (and all existing tests pass) but this may not be the correct or ideal way to address this (not knowing the whole codebase).
if (response.get$ref() != null){
response.set$ref(computeRef(response.get$ref(), pathRef));
}
if(response.getContent() != null) {
Map<String, MediaType> content = response.getContent();
for (String key: content.keySet()) {
MediaType mediaType = content.get(key);
if (mediaType.getSchema() != null) {
updateRefs(mediaType.getSchema(), pathRef);
}
Map<String, Example> examples = content.get(key).getExamples();
if (examples != null) {
for( Example example:examples.values()){
updateRefs(example, pathRef);
}
}
}
}
+ Map<String, Header> headers = response.getHeaders();
+ if(headers != null) {
+ for( Header header : headers.values()) {
+ updateRefs(header, pathRef);
+ }
+ }
}
+ protected void updateRefs(Header header, String pathRef) {
+ if (header.get$ref() != null) {
+ header.set$ref(computeRef(header.get$ref(), pathRef));
+ }
+ }
We believe that the OpenAPI specification supports the way that our specification files are structured.