You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Johnathan Ingram (Jira)" <ji...@apache.org> on 2022/05/05 03:45:00 UTC
[jira] [Updated] (CAMEL-18040) OpenApi Specification Generator Does not generate oneOf, allOf and anyOf when annotation @Schema(oneOf|allOf|anyOf = {X.class, Y.class}) is specified on a class
[ https://issues.apache.org/jira/browse/CAMEL-18040?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Johnathan Ingram updated CAMEL-18040:
-------------------------------------
Summary: OpenApi Specification Generator Does not generate oneOf, allOf and anyOf when annotation @Schema(oneOf|allOf|anyOf = {X.class, Y.class}) is specified on a class (was: OpenApi Specification Generator Does not generate oneOf when annotation @Schema(oneOf = {X.class, Y.class}) is specified on a class )
> OpenApi Specification Generator Does not generate oneOf, allOf and anyOf when annotation @Schema(oneOf|allOf|anyOf = {X.class, Y.class}) is specified on a class
> -----------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-18040
> URL: https://issues.apache.org/jira/browse/CAMEL-18040
> Project: Camel
> Issue Type: Improvement
> Components: camel-openapi-java
> Affects Versions: 3.14.2
> Reporter: Johnathan Ingram
> Priority: Minor
>
>
> Given the following classes
> {code:java}
> @Schema(oneOf = {FormA.class, FormB.class})
> public abstract class Form {
> } {code}
>
>
>
> {code:java}
> public class FormA extends Form {
> String code;
> String a;
> int b;
>
> public String getCode() { return this.code; }
> public void setCode(String code) { this.code = code; }
> public String getA() { return this.a; }
> public void setA(String a) { this.a = a; }
> public int getB() { return this.b; }
> public void setB(int b) { this.b = b; }
> } {code}
>
> {code:java}
> public class FormB extends Form {
> String code;
> int x;
> String y;
> public String getCode() { return this.code; }
> public void setCode(String code) { this.code = code; }
> public int getX() { return this.x; }
> public void setX(int x) { this.x = x; }
> public String getY() { return this.y; }
> public void setY(String y) { this.y = y; }
> } {code}
> {code:java}
> public class Wrapper {
> @JsonProperty("system") String system;
> @JsonProperty("form") Form form;
> public String getSystem() { return this.system; }
> public void setSystem(String system) { this.system = system; }
> public Form getForm() { return this.form; }
> @JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "system") @JsonSubTypes({ @Type(value = FormA.class, name = "Form A"), @Type(value = FormB.class, name = "Form B") })
> public void setForm(Form form) { this.form = form; }
> } {code}
> And finally the request of a Camel Rest Endpoint
> {code:java}
> rest("/prototype/")
> .id("rest.proto.oneof")
> .post("oneof")
> .bindingMode(RestBindingMode.json) .description("Prototype OneOf")
> .id("proto.oneof")
> .consumes("application/json")
> .produces(MediaType.APPLICATION_JSON )
> .type(Wrapper.class)
> .responseMessage()
> .code(200).message("Oneof working")
> .endResponseMessage()
> ....{code}
> The OpenAPI specification is correct except for the Form class in the schema components section
> {code:java}
> "Form" : {
> "type" : "object"
> },
> "FormA" : {
> "type" : "object",
> "properties" : {
> "code" : {
> "type" : "string"
> },
> "a" : {
> "type" : "string"
> },
> "b" : {
> "format" : "int32",
> "type" : "integer"
> }
> }
> },
> "FormB" : {
> "type" : "object",
> "properties" : {
> "code" : {
> "type" : "string"
> },
> "x" : {
> "format" : "int32",
> "type" : "integer"
> },
> "y" : {
> "type" : "string"
> }
> }
> },
> "Wrapper" : {
> "type" : "object",
> "properties" : {
> "system" : {
> "type" : "string"
> },
> "form" : {
> "$ref" : "#/components/schemas/Form"
> }
> }
> }
> }
> {code}
> NOTE: Form should be
> {code:java}
> "Form" : {
> "oneOf" : [
> ....
> ]
> }, {code}
>
>
--
This message was sent by Atlassian Jira
(v8.20.7#820007)