OpenAPITools / OpenAPITools/openapi-generator

[BUG] Object with additionalProperties detected as "free-form"

Open
#7,241 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Issue: Bug
Dominant language
Java
Stars
26.8k
Forks
7.7k
PR merge metrics
PR metrics pending

Description

Description

I have a type Money and a type MoneyTuple, which simply has additionalProperties: $ref: '#/Money'. Despite that the properties are all typed, the Java generator decides that this is a "free-form object" and doesn't output a DTO for it. Other types ref'ing MoneyTuple then fail.

The equivalent code NumberTuple where the values are numbers works as expected.

openapi-generator version

I'm using OpenAPI Generator 4.3.1 from the Maven plugin.

OpenAPI declaration file content or url
components:
  schemas:
    Money:
      type: object
      required: [currency, amount]
      properties:
        currency:
          type: string
        amount:
          type: string

    MoneyTuple: # ignored as "free-form object"
      type: object
      additionalProperties:
        $ref: '#/components/schemas/Money'

    MoneyTupleSeries: # fails on compilation because MoneyTuple isn't generated
      type: array
      items:
        type: object
        required: [label, values]
        properties:
          label:
            type: string
          values:
            $ref: '#/components/schemas/MoneyTuple'

    NumericTuple: # extends HashMap<String, Double>
      type: object
      additionalProperties:
        type: number
        format: double
Generation Details

I am using the Maven plugin with <generateAliasAsModel>true</generateAliasAsModel>.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the Java generator's handling of OpenAPI schemas using additionalProperties, and reproduce the supplied Money, MoneyTuple, MoneyTupleSeries, and NumericTuple declaration through the Maven plugin with generateAliasAsModel enabled. Done means MoneyTuple is generated as a typed map or DTO as appropriate, and MoneyTupleSeries compiles without the missing-model failure.

Written by the indexing model from the issue text.

Assessment

Tech stack
java, openapi
Domain
api, tooling
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.