Skip to content

[BUG] Nested arrays containing objects have no type #5667

@adamkaplan

Description

@adamkaplan

Bug Report Checklist

  • Have you provided a full/minimal spec to reproduce the issue?
  • Have you validated the input using an OpenAPI validator (example)?
  • What's the version of OpenAPI Generator used?
  • Have you search for related issues/PRs?
  • What's the actual output vs expected output?
  • [Optional] Bounty to sponsor the fix (example)
Description

The generated type of an array that is nested within another array is erased to the "Any" type. The type is well defined in the OAPI declaration, and should be reflected in the generated code.

This issue does not happen for objects in array unless that array is within another array.

The issue also does not occur when the nested object type of specified via $ref. Examples provided.

openapi-generator version

master (4.3.0-SNAPSHOT)

OpenAPI declaration file content or url
openapi: 3.0.0
info:
  title: API
  version: "1.0"
paths:
  /endpoint:
    get:
      operationId: getTest
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  badProp:
                    type: array
                    items:
                      type: array
                      items:
                        type: object
                        additionalProperties: false
                        properties:
                          prop:
                            type: string
                  okProp:
                    type: array
                    items:
                      type: array
                      items:
                        $ref: '#/components/schemas/MyObj'
components:
  schemas:
    MyObj:
      type: object
      additionalProperties: false
      properties:
        prop:
          type: string
Command line used for generation

java -jar openapi-generator-cli.jar generate -g kotlin -i spec.yaml -o gen

(also fails for Swift and probably any typed languge)

Steps to reproduce
  1. Save the example declaration above to spec.yaml & run the example command-line
  2. Open the generated model file: cat gen/src/main/kotlin/org/openapitools/client/models/InlineResponse200.kt
  3. Observe invalid property, which includes kotlin.Any inner type:
val badProp: kotlin.Array<kotlin.Array<kotlin.Any>>? = null
  1. Observe correct version, when using $ref, the inner type is MyObj:
val okProp: kotlin.Array<kotlin.Array<MyObj>>? = null

Desired output:

val badProp: kotlin.Array<kotlin.Array<MyObj>>? = null

Either MyObj or a generated inline model. It should just not be Any.

Related issues/PRs

n/a

Suggest a fix

The code used to introspect the properties of arrays should respect for nested child arrays. I have not been able to figure out a fix for this yet.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions