swagger-api / swagger-parser

Swagger Spec to Java POJOs
http://swagger.io
Apache License 2.0
786 stars 531 forks source link

OpenAPI v2 converter - Two identical schemas are not equals #779

Open quen2404 opened 6 years ago

quen2404 commented 6 years ago

Hello, first, thank you very much for this tool.

I'm trying to parse two equivalent schemas, one in swagger 2.0, the other in openapi 3.0 : swagger 2.0 : https://github.com/OAI/OpenAPI-Specification/blob/master/examples/v2.0/yaml/petstore.yaml openapi 3.0 : https://github.com/OAI/OpenAPI-Specification/blob/master/examples/v3.0/petstore.yaml

I'm using this dependencies :

        <dependency>
            <groupId>io.swagger.parser.v3</groupId>
            <artifactId>swagger-parser-v3</artifactId>
            <version>2.0.1</version>
        </dependency>
        <dependency>
            <groupId>io.swagger.parser.v3</groupId>
            <artifactId>swagger-parser-v2-converter</artifactId>
            <version>2.0.1</version>
        </dependency>

But it seems that the two OpenAPI are not equals. For example, in POST /pets operation, query parameters limit are differents : the swagger 2.0 parameter class is io.swagger.v3.oas.models.parameters.Parameter but the openapi 3.0 parameter class is io.swagger.v3.oas.models.parameters.QueryParameter. And there is same kind of problem with Schemas : ObjectSchema vs Schema.

It is a normal behavior ?

jmini commented 6 years ago

This is an interesting question. In OpenAPI-Generator (the instance created by Swagger-Parser is the input), we have decided to no rely on instanceOf. Example: To decide if a io.swagger.v3.oas.models.parameters.Parameter is a QueryParameter or a PathParameter, we just go for Parameter#getIn().

That said, the v2-to-v3-converter could be improved. The correct instance could be created during conversion.