[BUG] jaxrs-spec [server] oneOf, anyOf Polymorphism does not work
Created by: s-jepsen
Bug Report Checklist
-
Have you provided a full/minimal spec to reproduce the issue? -
Have you validated the input using an OpenAPI validator (example)? -
What's the version of OpenAPI Generator used? -
Have you search for related issues/PRs? -
What's the actual output vs expected output? -
[Optional] Bounty to sponsor the fix (example)
Description
Currently, openapi-generator doesn't support oneOf. It currently generates the following broken code, outputting UNKNOWN_BASE_TYPE rather than Pet for the example below. The code is broken with or without the discriminator in the Spec.
Bug:
@Path("/pets")
@Api(description = "the pets API")
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaJAXRSSpecServerCodegen", date = "2020-03-09T08:49:06.102+01:00[Europe/Copenhagen]")
public interface PetsApi {
@POST
@Consumes({ "application/json" })
@ApiOperation(value = "", notes = "", tags={ })
@ApiResponses(value = {
@ApiResponse(code = 200, message = "created", response = Void.class) })
Response petsPost(@Valid UNKNOWN_BASE_TYPE UNKNOWN_BASE_TYPE);
}
Expected
Generator config:
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>4.2.3</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>${project.basedir}/src/main/webapp/spec/api.yaml</inputSpec>
<generatorName>jaxrs-spec</generatorName>
<modelNameSuffix>ApiModel</modelNameSuffix>
<configOptions>
<sourceFolder>src/gen/java/main</sourceFolder>
<dateLibrary>java8</dateLibrary>
<java8>true</java8>
<interfaceOnly>true</interfaceOnly>
<returnResponse>true</returnResponse>
<useSwaggerAnnotations>true</useSwaggerAnnotations>
</configOptions>
</configuration>
</execution>
</executions>
</plugin>
OpenAPI Spec:
openapi: "3.0.2"
info:
version: 1.0.0
title: Polymorphism
paths:
/pets:
post:
requestBody:
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/Cat'
- $ref: '#/components/schemas/Dog'
discriminator:
propertyName: pet_type
responses:
'200':
description: created
components:
schemas:
# Parent
Pet:
type: object
required:
- pet_type
properties:
pet_type:
type: string
eats:
type: string
discriminator:
propertyName: pet_type
# Child 1
Dog:
allOf:
- $ref: '#/components/schemas/Pet'
- type: object
# all other properties specific to a `Dog`
properties:
bark:
type: boolean
# Child 2
Cat:
allOf:
- $ref: '#/components/schemas/Pet'
- type: object
# all other properties specific to a `Cat`
properties:
climbs:
type: boolean
openapi-generator version
4.2.3
OpenAPI declaration file content or url
Command line used for generation
Steps to reproduce
- create a pom.xml with openapi-generator-maven-plugin 4.2.3
- create api.yaml file above
- mvn clean compile
- see broken code under target directory \target\generated-sources\openapi\src\gen\java\main\org\openapitools\api\PetsApi.java
Related issues/PRs
This bug is related to the Server side Java code (SpringBoot) @bkabrda has already merged PR for client Jackson Client side: #5120
Suggest a fix
Try apply client side fix from #5120 to server side.