We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Multiple parameters with the same name but different locations (for instance, in: query vs in: header) are wrongly handled by the parser if:
in: query
in: header
$ref
"openapi": "3.0.0"
"openapi": "3.0.3"
The issue does NOT occur when either not using $ref, or declaring "openapi": "3.1.0".
"openapi": "3.1.0"
This looks like a bug because:
a) It violates the OpenAPI spec (both v3.0 and v3.1):
A unique parameter is defined by a combination of a name and location.
https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md#parameter-object
This should be respected regardless of whether the parameter is defined with, or without $ref.
b) I don't see a mention of a change in this area between v3.0 and v3.1 (for instance here or here) which would justify the difference of behaviour.
How to reproduce (holds at least for swagger-parser 2.1.22 and 2.1.19):
package parsertest; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.parameters.Parameter; import io.swagger.v3.parser.OpenAPIV3Parser; import io.swagger.v3.parser.core.models.ParseOptions; import java.io.IOException; import java.util.List; public class ParserTest { public static void main(String[] args) throws IOException { test("src/test/resources/parsertest/openapi-ok.json"); test("src/test/resources/jparsertest/openapi-ko.json"); } private static void test(String openapiFile) throws IOException { System.out.println("=== OpenAPI file:" + openapiFile); final ParseOptions options = new ParseOptions(); options.setResolve(true); options.setResolveCombinators(true); options.setResolveFully(true); final OpenAPI openAPI = new OpenAPIV3Parser().read(openapiFile, null, options); final List<Parameter> parameters = openAPI.getPaths().get("/myoperation").getGet().getParameters(); parameters.forEach(parameter -> { if (parameter != null) { System.out.println("Parameter name: " + parameter.getName() + " in: " + parameter.getIn()); } }); } }
openapi-ko.json:
{ "openapi": "3.0.0", "paths": { "/myoperation": { "get": { "parameters": [ {"$ref": "#/components/parameters/schemaParam1"}, {"$ref": "#/components/parameters/schemaParam2"} ], "responses": { "200": { "description": "OK", "content": { "text/plain": { "schema": { "type": "string" } }}}}}}}, "components": { "parameters": { "schemaParam1": { "name": "myParam", "in": "query", "schema": { "type": "string" } }, "schemaParam2": { "name": "myParam", "in": "header", "schema": { "type": "string" } }}} }
openapi-ok.json:
{ "openapi": "3.0.0", "paths": { "/myoperation": { "get": { "parameters": [ { "in": "query", "name": "myParam", "schema": { "type": "string" } }, { "in": "header", "name": "myParam", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "text/plain": { "schema": { "type": "string" } }}}}}}} }
Output:
=== OpenAPI file:src/test/resources/parsertest/openapi-ok.json Parameter name: myParam in: query Parameter name: myParam in: header === OpenAPI file:src/test/resources/parsertest/openapi-ko.json Parameter name: myParam in: query
That is, for the OpenAPI using $ref, only one of the two parameters is returned by getParameters().
getParameters()
For comparison, if modifying the OpenAPI files to declare "openapi": 3.1.0, both the header and query parameter are returned:
"openapi": 3.1.0
=== OpenAPI file:src/test/resources/parsertest/openapi-ok.json Parameter name: myParam in: query Parameter name: myParam in: header === OpenAPI file:src/test/resources/parsertest/openapi-ko.json Parameter name: myParam in: query Parameter name: myParam in: header
The text was updated successfully, but these errors were encountered:
No branches or pull requests
Multiple parameters with the same name but different locations (for instance,
in: query
vsin: header
) are wrongly handled by the parser if:$ref
)."openapi": "3.0.0"
or"openapi": "3.0.3"
).The issue does NOT occur when either not using
$ref
, or declaring"openapi": "3.1.0"
.This looks like a bug because:
a) It violates the OpenAPI spec (both v3.0 and v3.1):
https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md#parameter-object
This should be respected regardless of whether the parameter is defined with, or without
$ref
.b) I don't see a mention of a change in this area between v3.0 and v3.1 (for instance here or here) which would justify the difference of behaviour.
How to reproduce (holds at least for swagger-parser 2.1.22 and 2.1.19):
openapi-ko.json:
openapi-ok.json:
Output:
That is, for the OpenAPI using
$ref
, only one of the two parameters is returned bygetParameters()
.For comparison, if modifying the OpenAPI files to declare
"openapi": 3.1.0
, both the header and query parameter are returned:The text was updated successfully, but these errors were encountered: