OpenAPITools / OpenAPITools/openapi-generator
[BUG] oneOf property in response doesn't work
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 26.8k
- Forks
- 7.7k
- PR merge metrics
- PR metrics pending
Description
I am trying to generate different response model based on "oneOf" attribute, but it doesn't work at all
openapi-generator-maven-plugin : 5.3.0
openapi-generator.version : 5.3.0
Error message :
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /Users/mostafaramadan/Documents/DummyProjects/openapi/target/generated-sources/openapi/src/main/java/com/baeldung/openapi/api/SomethingApi.java:[8,34] cannot find symbol
symbol: class OneOfApiResultOkApiResultError
location: package com.baeldung.openapi.model
[ERROR] /Users/mostafaramadan/Documents/DummyProjects/openapi/target/generated-sources/openapi/src/main/java/com/baeldung/openapi/api/SomethingApiDelegate.java:[3,34] cannot find symbol
symbol: class OneOfApiResultOkApiResultError
location: package com.baeldung.openapi.model
[ERROR] /Users/mostafaramadan/Documents/DummyProjects/openapi/target/generated-sources/openapi/src/main/java/com/baeldung/openapi/api/SomethingApi.java:[41,28] cannot find symbol
symbol: class OneOfApiResultOkApiResultError
location: interface com.baeldung.openapi.api.SomethingApi
[ERROR] /Users/mostafaramadan/Documents/DummyProjects/openapi/target/generated-sources/openapi/src/main/java/com/baeldung/openapi/api/SomethingApiDelegate.java:[32,28] cannot find symbol
symbol: class OneOfApiResultOkApiResultError
location: interface com.baeldung.openapi.api.SomethingApiDelegate
[ERROR] /Users/mostafaramadan/Documents/DummyProjects/openapi/target/generated-sources/openapi/src/main/java/com/baeldung/openapi/api/SomethingApi.java:[33,81] cannot find symbol
symbol: class OneOfApiResultOkApiResultError
location: interface com.baeldung.openapi.api.SomethingApi
[ERROR] /Users/mostafaramadan/Documents/DummyProjects/openapi/target/generated-sources/openapi/src/main/java/com/baeldung/openapi/api/SomethingApi.java:[35,65] cannot find symbol
symbol: class OneOfApiResultOkApiResultError
location: interface com.baeldung.openapi.api.SomethingApi
[ERROR] /Users/mostafaramadan/Documents/DummyProjects/openapi/target/generated-sources/openapi/src/main/java/com/baeldung/openapi/model/ApiResultOk.java:[22,10] incompatible types: java.lang.String cannot be converted to java.lang.Boolean
[ERROR] /Users/mostafaramadan/Documents/DummyProjects/openapi/target/generated-sources/openapi/src/main/java/com/baeldung/openapi/model/ApiResultError.java:[22,11] incompatible types: java.lang.String cannot be converted to java.lang.Boolean
[INFO] 8 errors
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.831 s
[INFO] Finished at: 2022-02-12T18:36:39+02:00
Yml file:
openapi: "3.0.0"
info:
version: 1.0.0
title: Swagger Petstore
license:
name: MIT
servers:
- url: http://localhost:8080/
paths:
/something:
get:
responses:
'200':
description: Result
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/ApiResultOk'
- $ref: '#/components/schemas/ApiResultError'
examples:
success:
summary: Example of a successful response
value:
result: true
token: abcde12345
error:
summary: Example of an error response
value:
result: false
errorCode: "00002"
errorMsg: "duplicated account already exist"
components:
schemas:
ApiResultOk:
type: object
properties:
result:
type: boolean
enum: [ true ]
token:
type: string
required:
- result
- token
ApiResultError:
type: object
properties:
result:
type: boolean
enum: [ false ]
errorCode:
type: string
example: "00002"
errorMsg:
type: string
example: "duplicated account already exist"
Pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>spring-boot-libraries-2</artifactId>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
</dependency>
<!-- openapi -->
<dependency>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator</artifactId>
<version>${openapi-generator.version}</version>
</dependency>
<dependency>
<groupId>org.openapitools</groupId>
<artifactId>jackson-databind-nullable</artifactId>
<version>${jackson-databind.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${springfox.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.awaitility</groupId>
<artifactId>awaitility</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>5.3.0</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>
${project.basedir}/src/main/resources/petstore.yml
</inputSpec>
<generatorName>spring</generatorName>
<apiPackage>com.baeldung.openapi.api</apiPackage>
<modelPackage>com.baeldung.openapi.model</modelPackage>
<supportingFilesToGenerate>
ApiUtil.java
</supportingFilesToGenerate>
<configOptions>
<delegatePattern>true</delegatePattern>
</configOptions>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<properties>
<jobrunr.version>3.1.1</jobrunr.version>
<awaitility.version>4.0.3</awaitility.version>
<openapi-generator.version>5.3.0</openapi-generator.version>
<spring.data.version>2.4.5</spring.data.version>
<jackson-databind.version>0.2.1</jackson-databind.version>
<springfox.version>2.9.2</springfox.version>
</properties>
</project>
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 with the OpenAPI schema in src/main/resources/petstore.yml and reproduce generation with the spring generator configured in pom.xml using version 5.3.0. Inspect the generated SomethingApi.java, SomethingApiDelegate.java, ApiResultOk.java, and ApiResultError.java files; done means the generated project compiles and the oneOf response model is generated consistently.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- api, backend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100