Skip to content

additionalProperties=true is getting mis-categorized as UntypedProperty #7586

Open
@EtonDoze

Description

@EtonDoze
Description

As per the definition of Free-Form Objects described in Swagger documentation here, additionalProperties: true needs to be treated as dictionary values can be of any type.

I assume any is interpreted as Object.class in the world of Java.
During the parsing or codegen modeling (not sure), such an object is treated as UntypedProperty causing following errors during codegen

[ERROR] No Type defined for Property io.swagger.models.properties.UntypedProperty@0
[ERROR] String to be sanitized is null. Default to ERROR_UNKNOWN

Actual: additionalProperties=true is treated as UntypedProperty. Generated class does not extend HashMap
Expected: additionalProperties=true needs to be treated as ObjectProperty. Generated class should extend HashMap

Sample notation:
pet.json << this one fails with above error

{
  "type": "object",
  "title": "pet",
  "additionalProperties": true,
  "properties": {
    "color": {
      "type": "string",
    }
  }
}

pet.json << this one works without any error

{
  "type": "object",
  "title": "pet",
  "additionalProperties": {
    "type": "object"
  },
  "properties": {
    "color": {
      "type": "string",
    }
  }
}
Swagger-codegen version

v2.3.1

Swagger declaration file content or url

swagger.json

{
  "swagger": "2.0",
  "paths": {
    "/pet": {
      "get": {
        "operationId": "petstoreGet",
        "responses": {
          "200": {
            "schema": {
              "$ref": "./pet.json"
            }
          }
        }
      }
    }
  }
}
Command line used for generation

Used maven plugin

<groupId>io.swagger</groupId>
<artifactId>swagger-codegen-maven-plugin</artifactId>
<version>2.3.1</version>
Steps to reproduce

Place above swagger.json and pet.json in same folder and run the maven plugin to generate java code.

Related issues/PRs
Suggest a fix/enhancement

Treat
"additionalProperties": true, exactly same as

"additionalProperties": {
  "type": "object"
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions