swagger-api / swagger-api/swagger-parser

Parser does not Dereference Discriminator Mapping Targets

Open
#1,875 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Java
Stars
867
Forks
560
Avg merge
2d 21h
Merged PRs (30d)
7

Description

When providing a discriminator for subtypes you can provide a reference to the target type for each discriminator value (see https://swagger.io/docs/specification/data-models/inheritance-and-polymorphism/)

I would expect this to be correctly resolved to the target schema object. Instead it is treated as a string and left as a reference. This means the Discriminator.getMapping() method returns data that is useless for deserializing a response.

The following OpenAPI json definition for the discriminator:

"discriminator": {
  "propertyName": "myDiscriminator",
  "mapping": {
    "type_a": "#/components/schemas/TypeA",
    "type_b": "#/components/schemas/TypeB"
  }
},

Produces a Discriminator instance (after python name mangling) like the following:

{
  "mapping": {
    "type_a": "#/components/schemas/TypeA",
    "type_b": "#/components/schemas/TypeB"
  },
  "propertyName": "my_discriminator"
}

I would expect the values of the mapping HashMap to actually be the target classes, so that this Discriminator object can be used to dispatch to the correct subclass.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by tracing Discriminator.getMapping() and the parser's reference-resolution path using the OpenAPI JSON example in the issue. Add a regression test for discriminator mappings and verify that mapping values resolve to target schema objects and support response deserialization dispatch.

Written by the indexing model from the issue text.

Assessment

Tech stack
java, openapi
Domain
api
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.