swagger-api / swagger-api/swagger-parser
Parser does not Dereference Discriminator Mapping Targets
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
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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