From 9a0b557a816161a3770add8a8dd0f1ce883b2947 Mon Sep 17 00:00:00 2001 From: Chrimle <28791817+Chrimle@users.noreply.github.com> Date: Tue, 24 Feb 2026 00:39:06 +0100 Subject: [PATCH 1/5] Add OneOf Example to OpenAPI Spec. Signed-off-by: Chrimle <28791817+Chrimle@users.noreply.github.com> --- test-common/src/main/resources/api.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test-common/src/main/resources/api.yaml b/test-common/src/main/resources/api.yaml index 326525061..a16c13ff3 100644 --- a/test-common/src/main/resources/api.yaml +++ b/test-common/src/main/resources/api.yaml @@ -137,6 +137,12 @@ components: uniqueItems: true items: $ref: '#/components/schemas/ExampleRecord' + # The oneOf implementation + FlexibleRecord: + description: A schema that must be either a standard record or a null record. + oneOf: + - $ref: '#/components/schemas/ExampleRecord' + - $ref: '#/components/schemas/ExampleNullableRecord' ExampleRecord: type: object description: Example of a Record From 953ec5a54d9d1e7bc0a27fe751be0e67e6971afa Mon Sep 17 00:00:00 2001 From: Chrimle <28791817+Chrimle@users.noreply.github.com> Date: Tue, 24 Feb 2026 00:53:45 +0100 Subject: [PATCH 2/5] Enable Generate APIs Signed-off-by: Chrimle <28791817+Chrimle@users.noreply.github.com> --- tests/pom.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/pom.xml b/tests/pom.xml index f4009f6d6..82446699b 100644 --- a/tests/pom.xml +++ b/tests/pom.xml @@ -21,7 +21,7 @@ ${project.groupId}.o2jrm true - false + true false false java @@ -164,6 +164,7 @@ ${output.default} ${modelPackage.default}.${execution.standard} + ${modelPackage.default}.${execution.standard} ${generateModels.default} ${generateApis.default} ${generateModelTests.default} From ac879eb1251ca643ed1b011ae26e3f48b64d5f8c Mon Sep 17 00:00:00 2001 From: Chrimle <28791817+Chrimle@users.noreply.github.com> Date: Tue, 24 Feb 2026 00:54:10 +0100 Subject: [PATCH 3/5] Use OneOf as API Endpoint Response Signed-off-by: Chrimle <28791817+Chrimle@users.noreply.github.com> --- test-common/src/main/resources/api.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test-common/src/main/resources/api.yaml b/test-common/src/main/resources/api.yaml index a16c13ff3..015bebd55 100644 --- a/test-common/src/main/resources/api.yaml +++ b/test-common/src/main/resources/api.yaml @@ -16,6 +16,11 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/FlexibleRecord' + components: schemas: From 1684e320f064d6747e5c5c526a9962ddc9af27ae Mon Sep 17 00:00:00 2001 From: Chrimle <28791817+Chrimle@users.noreply.github.com> Date: Fri, 27 Feb 2026 21:49:25 +0100 Subject: [PATCH 4/5] Inline OneOf Schemas Signed-off-by: Chrimle <28791817+Chrimle@users.noreply.github.com> --- test-common/src/main/resources/api.yaml | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/test-common/src/main/resources/api.yaml b/test-common/src/main/resources/api.yaml index 015bebd55..08abafa36 100644 --- a/test-common/src/main/resources/api.yaml +++ b/test-common/src/main/resources/api.yaml @@ -19,7 +19,21 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/FlexibleRecord' + title: FlexibleRecord + oneOf: + - type: object + title: FlexibleNonNullRecord + properties: + field1: + type: boolean + - type: object + title: FlexibleNullableRecord + nullable: true + properties: + field1: + type: boolean + + components: @@ -142,12 +156,6 @@ components: uniqueItems: true items: $ref: '#/components/schemas/ExampleRecord' - # The oneOf implementation - FlexibleRecord: - description: A schema that must be either a standard record or a null record. - oneOf: - - $ref: '#/components/schemas/ExampleRecord' - - $ref: '#/components/schemas/ExampleNullableRecord' ExampleRecord: type: object description: Example of a Record From 8bcd4eb973060018d2a1a6c0d5272a0c5e143bfe Mon Sep 17 00:00:00 2001 From: Chrimle <28791817+Chrimle@users.noreply.github.com> Date: Fri, 27 Feb 2026 21:50:12 +0100 Subject: [PATCH 5/5] Track webclient/standard OneOf-Records Signed-off-by: Chrimle <28791817+Chrimle@users.noreply.github.com> --- .../standard/FlexibleNonNullRecord.java | 44 ++++++++++++++++++ .../standard/FlexibleNullableRecord.java | 44 ++++++++++++++++++ .../webclient/standard/FlexibleRecord.java | 46 +++++++++++++++++++ 3 files changed, 134 insertions(+) create mode 100644 tests/target/generated-sources/openapi/src/src/gen/java/main/io/github/chrimle/o2jrm/webclient/standard/FlexibleNonNullRecord.java create mode 100644 tests/target/generated-sources/openapi/src/src/gen/java/main/io/github/chrimle/o2jrm/webclient/standard/FlexibleNullableRecord.java create mode 100644 tests/target/generated-sources/openapi/src/src/gen/java/main/io/github/chrimle/o2jrm/webclient/standard/FlexibleRecord.java diff --git a/tests/target/generated-sources/openapi/src/src/gen/java/main/io/github/chrimle/o2jrm/webclient/standard/FlexibleNonNullRecord.java b/tests/target/generated-sources/openapi/src/src/gen/java/main/io/github/chrimle/o2jrm/webclient/standard/FlexibleNonNullRecord.java new file mode 100644 index 000000000..2c44c4b92 --- /dev/null +++ b/tests/target/generated-sources/openapi/src/src/gen/java/main/io/github/chrimle/o2jrm/webclient/standard/FlexibleNonNullRecord.java @@ -0,0 +1,44 @@ +/* + * Example OpenAPI Spec. + * An example OpenAPI-spec to generate example Java records. + * + * The version of the OpenAPI document: 0.0.1 + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + * + * This class was generated using custom mustache templates from + * openapi-to-java-records-mustache-templates. For further information, + * questions, requesting features or reporting issues, please visit: + * https://github.com/Chrimle/openapi-to-java-records-mustache-templates. + * Generated with Version: 3.4.0 + * + */ + +package io.github.chrimle.o2jrm.webclient.standard; + +import java.util.Objects; +import java.util.Arrays; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.annotation.JsonTypeName; + +/** + * FlexibleNonNullRecord. + * + * @param field1 Boolean. + */ +public record FlexibleNonNullRecord( + Boolean field1) { + + @JsonCreator + public FlexibleNonNullRecord( + final Boolean field1) { + this.field1 = field1; + } +} diff --git a/tests/target/generated-sources/openapi/src/src/gen/java/main/io/github/chrimle/o2jrm/webclient/standard/FlexibleNullableRecord.java b/tests/target/generated-sources/openapi/src/src/gen/java/main/io/github/chrimle/o2jrm/webclient/standard/FlexibleNullableRecord.java new file mode 100644 index 000000000..9c19422fd --- /dev/null +++ b/tests/target/generated-sources/openapi/src/src/gen/java/main/io/github/chrimle/o2jrm/webclient/standard/FlexibleNullableRecord.java @@ -0,0 +1,44 @@ +/* + * Example OpenAPI Spec. + * An example OpenAPI-spec to generate example Java records. + * + * The version of the OpenAPI document: 0.0.1 + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + * + * This class was generated using custom mustache templates from + * openapi-to-java-records-mustache-templates. For further information, + * questions, requesting features or reporting issues, please visit: + * https://github.com/Chrimle/openapi-to-java-records-mustache-templates. + * Generated with Version: 3.4.0 + * + */ + +package io.github.chrimle.o2jrm.webclient.standard; + +import java.util.Objects; +import java.util.Arrays; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.annotation.JsonTypeName; + +/** + * FlexibleNullableRecord. + * + * @param field1 Boolean. + */ +public record FlexibleNullableRecord( + Boolean field1) { + + @JsonCreator + public FlexibleNullableRecord( + final Boolean field1) { + this.field1 = field1; + } +} diff --git a/tests/target/generated-sources/openapi/src/src/gen/java/main/io/github/chrimle/o2jrm/webclient/standard/FlexibleRecord.java b/tests/target/generated-sources/openapi/src/src/gen/java/main/io/github/chrimle/o2jrm/webclient/standard/FlexibleRecord.java new file mode 100644 index 000000000..fc5834da8 --- /dev/null +++ b/tests/target/generated-sources/openapi/src/src/gen/java/main/io/github/chrimle/o2jrm/webclient/standard/FlexibleRecord.java @@ -0,0 +1,46 @@ +/* + * Example OpenAPI Spec. + * An example OpenAPI-spec to generate example Java records. + * + * The version of the OpenAPI document: 0.0.1 + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + * + * This class was generated using custom mustache templates from + * openapi-to-java-records-mustache-templates. For further information, + * questions, requesting features or reporting issues, please visit: + * https://github.com/Chrimle/openapi-to-java-records-mustache-templates. + * Generated with Version: 3.4.0 + * + */ + +package io.github.chrimle.o2jrm.webclient.standard; + +import java.util.Objects; +import java.util.Arrays; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import io.github.chrimle.o2jrm.webclient.standard.FlexibleNonNullRecord; +import io.github.chrimle.o2jrm.webclient.standard.FlexibleNullableRecord; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.annotation.JsonTypeName; + +/** + * FlexibleRecord. + * + * @param field1 Boolean. + */ +public record FlexibleRecord( + Boolean field1) { + + @JsonCreator + public FlexibleRecord( + final Boolean field1) { + this.field1 = field1; + } +}