-
- Notifications
You must be signed in to change notification settings - Fork 7.2k
Description
Description
The generator fails in case the openapi file describes an Array of Strings whereas, if I insert a stair of object between Array and String, the generated code is correct.
The compilation error looks like :
g++ -c -I./api -I./model -I./impl -Wall -g -std=c++11 -o obj/model/UeContext.o model/UeContext.cpp model/UeContext.cpp: In member function ‘virtual void com::bcom::amf::microservice::server::ms1::model::UeContext::fromJson(nlohmann::json&)’: model/UeContext.cpp:77:25: error: ‘std::__cxx11::string {aka class std::__cxx11::basic_string<char>}’ has no member named ‘fromJson’ newItem.fromJson(item); ^ ../rules.mk:61: recipe for target 'obj/model/UeContext.o' failed
It is a well known error already fixed in some others conditions. See suggest below.
NOTE1: As previously wrote, if I insert a stair between Array and String, the string type is well handled.
NOTE2: Switch between the two UeContext type I wrote inside the openapi.yaml example to reproduce the error and the correct behavior.
openapi-generator version
Current master 3.3.2-SNAPSHOT got the issue but I also used the PR #1230 to take advantage of the fix #1168
OpenAPI declaration file content or url
openapi: 3.0.0 info: version: 1.0.0 title: Check generation of array of object (Pistache) description: Internal ref filename is check_array_of_strings.yaml servers: - url: http://localhost:8080 paths: /stair1: post: summary: blabla operationId: check_generation tags: - Stair1 requestBody: content: application/json: schema: $ref: '#/components/schemas/UeContext' required: true responses: '200': description: Expected response to a valid request content: application/json: schema: type: string default: description: Unexpected error components: schemas: # Fail UeContext: type: object properties: groups: type: array items: $ref: '#/components/schemas/GroupId' minItems: 0 # Success # UeContext: # type: object # properties: # groups: # type: array # items: # $ref: '#/components/schemas/ObjectId' # minItems: 0 ObjectId: type: object properties: events: $ref: '#/components/schemas/GroupId' GroupId: type: string
Command line used for generation
Generate :
openapi-generator-cli.sh generate -i ./openapi.yaml -g cpp-pistache-server -c ./config.json -o .
Compile :
g++ -c -I./api -I./model -I./impl -Wall -g -std=c++11 -o obj/model/UeContext.o model/UeContext.cpp
Steps to reproduce
Generate & compile
Related issues/PRs
Suggest a fix/enhancement
Generated code looks like below. I inserted a #ifdef to explain which code should be generated, but I'm sure @etherealjoy already know what should be done ;)
void UeContext::fromJson(nlohmann::json& val) { { m_Groups.clear(); nlohmann::json jsonArray; if(val.find("groups") != val.end()) { for( auto& item : val["groups"] ) { if(item.is_null()) { m_Groups.push_back( std::string() ); } else { std::string newItem; #ifdef CURRENT_GENERATION // This is the current code generation newItem.fromJson(item); #else // This is what should be generated newItem = ModelBase::fromJson(item); #endif m_Groups.push_back( newItem ); } } } } }