OpenAPITools / openapi-generator

OpenAPI Generator allows generation of API client libraries (SDK generation), server stubs, documentation and configuration automatically given an OpenAPI Spec (v2, v3)
https://openapi-generator.tech
Apache License 2.0
21.37k stars 6.46k forks source link

[BUG][C++][Pistache][Restbed] Array of objects does not generate model file #3271

Open muttleyxd opened 5 years ago

muttleyxd commented 5 years ago

Bug Report Checklist

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

auto-labeler[bot] commented 5 years ago

👍 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.

etherealjoy commented 5 years ago

@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.

bda618 commented 4 years ago

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.