Openapi-generator: [BUG][C++][Pistache][Restbed] Array of objects does not generate model file

Created on 3 Jul 2019  路  3Comments  路  Source: OpenAPITools/openapi-generator

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 (example)?
  • [X] What's the version of OpenAPI Generator used?
  • [X] Have you search for related issues/PRs?
  • [X] What's the actual output vs expected output?
  • [ ] [Optional] Bounty to sponsor the fix (example)
Description

Actual:
When declaring array of objects (which have properties), model is not generated.
It will result in Object.h include missing for cpp-restbed-server and cpp-pistache-server

Expected:
model/ProblematicArrayType.h (and .cpp) are created

openapi-generator version

4.0.2

OpenAPI declaration file content or url
openapi: 3.0.0
info:
  description: Some description
  version: 0.0.1
  title: Some title

tags:
  - name: hello

paths:
  "/there":
    get:
      operationId: helloThereGet
      tags:
        - hello
      summary: Do something
      responses:
        200:
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ProblematicArrayType"
servers:
  - url: http://localhost:8080
components:
  schemas:
    ProblematicArrayType:
      type: array
      items:
        type: object
        properties:
          someint:
            type: integer
            format: int32
          somestring:
            type: string
Command line used for generation

openapi-generator-cli generate -i problem.yaml -g cpp-pistache-server -o generated_pistache
openapi-generator-cli generate -i problem.yaml -g cpp-restbed-server -o generated_restbed

Steps to reproduce
openapi-generator-cli generate -i problem.yaml -g cpp-pistache-server -o generated_pistache
cd generated_pistache
mkdir build
cd build
cmake ..
make -j4
Related issues/PRs

2769 #1827 #1637

Suggest a fix

No idea how to fix it, but the issue happens both on Pistache and Restbed

Bug C++

Most helpful comment

@muttleyxd
So I made a check on this issue, the issue is because of the mapping of object to Object.
So whenever Object is detected the import is added. This is wrong for Pistache.

        typeMapping.put("object", "Object");
        importMapping.put("Object", "#include \"Object.h\"");

To support free form objects in Pistache is easy, simply by mapping the object to nlohmann:json

so the include can be changed to nlohmann/json.hpp or nlohmann\json.hpp (Linux/Windows)

All the issues you linked are related.

All 3 comments

馃憤 Thanks for opening this issue!
馃彿 I have applied any labels matching special text in your issue.

The team will review the labels and make any necessary changes.

@muttleyxd
So I made a check on this issue, the issue is because of the mapping of object to Object.
So whenever Object is detected the import is added. This is wrong for Pistache.

        typeMapping.put("object", "Object");
        importMapping.put("Object", "#include \"Object.h\"");

To support free form objects in Pistache is easy, simply by mapping the object to nlohmann:json

so the include can be changed to nlohmann/json.hpp or nlohmann\json.hpp (Linux/Windows)

All the issues you linked are related.

I have a similar issue for Kotlin, when declaring array of objects (which have properties), model is not generated.

openapi-generator version
4.2.1
OpenAPI declaration file content or url

 Errors:
      type: array
      description: List of status messages
      items:
          type: object
          properties:
            Code:
              type: string
              description: The actual Error Code value

Command line used for generation

openapi-generator-cli-4.2.1.jar org.openapitools.codegen.OpenAPIGenerator generate -g eaip-kotlin-spring -i problem.yaml --skip-validate-spec --generate-alias-as-model

Output:
@JsonIgnoreProperties(ignoreUnknown = true) data class Errors ( ) : kotlin.collections.List<kotlin.Any>{ constructor() : this()
Workaround I have found:

   Errors:
      type: array
      description: List of status messages
      properties:
        items:
            type: object
            properties:
              Code:
                type: string
                description: The actual Error Code value

My problem is that I am not owner of this API, so I need to find some arguments why do I need to wrap everything into properties, because an original YAML is totally fine from OpenAPI point of view.

Was this page helpful?
0 / 5 - 0 ratings