swagger-api / swagger-parser

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

Discriminator mapping refs (anyOf) & callback refs not processed #2086

Open anthochristen opened 2 months ago

anthochristen commented 2 months ago

When relative paths are used in discriminator mappings (anyOf) & callbacks the references are not processed.

Discriminator Mapping Ref sync issue:

  "requestBody": {
      "required": true,
      "content": {
          "application/json": {
              "schema": {
                  "anyOf": [
                      {
                          "$ref": "../components/schemas/adoption_request_for_bird.json"
                      },
                      {
                          "$ref": "../components/schemas/adoption_request_for_cat.json"
                      }
                  ],
                  "discriminator": {
                      "propertyName": "animal_type",
                      "mapping": {
                          "BIRD": "../components/schemas/adoption_request_for_bird.json",
                          "CAT": "../components/schemas/adoption_request_for_cat.json"
                      }
                  }
              }

In this case post the parsing the anyOf schemas becomes #/components/schemas/adoption_request_for_bird but the disciminator mapping still remains as ../components/schemas/adoption_request_for_bird.json. However the same works for OneOf.

Callback Ref issues:

{
  "{$request.body#/callback_url}/start": {
    "put": {
      "summary": "Does a callback",
      "description": "You know what it does",
      "requestBody": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "../../../schemas/payload.json"
            }
          }
        }
      },
      "responses": {
        "204": {
          "description": "Your server implementation should return this HTTP status code if the data was received successfully."
        }
      }
    }
  }
}

In this case the payload schema is incorrectly searched from the openapi.json base path instead of the relative path from the callback. Also this (looking in base path instead of relative path) seems to occur for parameter examples too.

anthochristen commented 2 months ago

The relative refs issue in callbacks & parameter examples can be worked around by changing the ref path to be relative from base directory, instead of current directory.

But the Discriminator mapping ref issue breaks codegen, it is not able to resolve the Type. And creates some ERRORUNKNOWN class and compilation fails.

anthochristen commented 2 months ago

@frantuma any updates on the PR for this issue?

anthochristen commented 1 month ago

These issues are not present in the npm swagger-parser library.

anthochristen commented 2 weeks ago

@frantuma / @gracekarina, Can you help check if #2087 help solve this as expected?