-
-
Notifications
You must be signed in to change notification settings - Fork 7.4k
Open
Labels
Description
Bug Report Checklist
- [ x] Have you provided a full/minimal spec to reproduce the issue?
- [ x] Have you validated the input using an OpenAPI validator?
- [ x] Have you tested with the latest master to confirm the issue still exists?
- [ x] Have you searched for related issues/PRs?
Description
Generating a client using the cpp-oatpp-client generator fails with a ClassCastException if a oneOf is present in the schema.
Exception in thread "main" java.lang.RuntimeException: Could not process model 'Filter_name'.Please make sure that your schema is correct!
at org.openapitools.codegen.DefaultGenerator.generateModels(DefaultGenerator.java:519)
at org.openapitools.codegen.DefaultGenerator.generateModels(DefaultGenerator.java:444)
at org.openapitools.codegen.DefaultGenerator.generate(DefaultGenerator.java:1292)
at org.openapitools.codegen.cmd.Generate.execute(Generate.java:535)
at org.openapitools.codegen.cmd.OpenApiGeneratorCommand.run(OpenApiGeneratorCommand.java:32)
at org.openapitools.codegen.OpenAPIGenerator.main(OpenAPIGenerator.java:66)
Caused by: java.lang.ClassCastException: class io.swagger.v3.oas.models.media.JsonSchema cannot be cast to class io.swagger.v3.oas.models.media.ArraySchema (io.swagger.v3.oas.models.media.JsonSchema and io.swagger.v3.oas.models.media.ArraySchema are in unnamed module of loader 'app')
at org.openapitools.codegen.languages.CppOatppClientCodegen.getTypeDeclaration(CppOatppClientCodegen.java:315)
at org.openapitools.codegen.DefaultCodegen.fromProperty(DefaultCodegen.java:4184)
at org.openapitools.codegen.DefaultCodegen.fromProperty(DefaultCodegen.java:3971)
at org.openapitools.codegen.languages.AbstractCppCodegen.fromProperty(AbstractCppCodegen.java:275)
at org.openapitools.codegen.DefaultCodegen.addVars(DefaultCodegen.java:6181)
at org.openapitools.codegen.DefaultCodegen.addVars(DefaultCodegen.java:6102)
at org.openapitools.codegen.DefaultCodegen.updateModelForComposedSchema(DefaultCodegen.java:2863)
at org.openapitools.codegen.DefaultCodegen.fromModel(DefaultCodegen.java:3153)
at org.openapitools.codegen.languages.CppOatppClientCodegen.fromModel(CppOatppClientCodegen.java:182)
at org.openapitools.codegen.DefaultGenerator.processModels(DefaultGenerator.java:1754)
at org.openapitools.codegen.DefaultGenerator.generateModels(DefaultGenerator.java:514)
... 5 more
openapi-generator version
7.21.0-SNAPSHOT
OpenAPI declaration file content or url
"components" : {
"schemas" : {
"Filter" : {
"type" : "object",
"properties" : {
"name" : {
"oneOf" : [ {
"$ref" : "#/components/schemas/EqualsPropertyFilter"
}, {
"$ref" : "#/components/schemas/EndsWithPropertyFilter"
}, {
"$ref" : "#/components/schemas/InPropertyFilter"
}, {
"type" : "null"
} ]
},
....
},
"EndsWithPropertyFilter" : {
"type" : "object",
"properties" : {
"endsWith" : {
"type" : "string"
}
},
"required" : [ "endsWith" ]
},
"EqualsPropertyFilter" : {
"type" : "object",
"properties" : {
"eq" : {
"type" : "string"
}
},
"required" : [ "eq" ]
},
"InPropertyFilter" : {
"type" : "object",
"properties" : {
"in" : {
"type" : "array",
"items" : {
"type" : "string"
}
}
},
"required" : [ "in" ]
}
}
}
Generation Details
openapi-generator-cli generate -i openapi-spec.json -o api-cpp -g cpp-oatpp-client
Suggest a fix
Other C++ generators use a std::variant<Type1, Type2, ...> to represent oneOf, anyOf. This code is missing from the cpp-oatpp-client generator.
See for example
Line 1502 in a2fd144
| if (p.getOneOf() != null && !p.getOneOf().isEmpty()) { |
Reactions are currently unavailable