swagger-api / swagger-codegen

swagger-codegen contains a template-driven engine to generate documentation, API clients and server stubs in different languages by parsing your OpenAPI / Swagger definition.
http://swagger.io
Apache License 2.0
16.72k stars 6.02k forks source link

[JAVASpring] Incorrect model classnames but only in lists? #12391

Open RHinderiks opened 1 month ago

RHinderiks commented 1 month ago
Description

Since our main.yaml was getting oversized way too quickly we decided to split the file up in separate files and $ref them in the main.yaml. However when using the following code

 details:
    type: array
    items:
      $ref: './DetailDto.yaml'

The DetailDto is generated correctly but the details list will look for the following class SchemasDetailDtoYaml.java which seems to be the path. When everything was in a single file and we referenced #/components/schemas/DetailDto everything was fine.

Swagger-codegen version

3.0.55, also broken in 3.0.52. Haven't used any other version yet

Swagger declaration file content or url

Main.yaml

    DataDto:
      $ref: './schemas/DataDto.yaml'

    DetailDto:
      $ref: './schemas/DetailDto.yaml'

Data.yaml

    type: object
    properties:
        details:
            type: array
            items:
                $ref: './DetailDto.yaml'
Command line used for generation

`

io.swagger.codegen.v3
            <artifactId>swagger-codegen-maven-plugin</artifactId>
            <version>3.0.52</version>
            <executions>
                <execution>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <configuration>
                        <inputSpec>${project.basedir}/src/main/resources/api/main.yaml</inputSpec>
                        <!-- allows you to generate a list of configuration options, won't generate code if enabled -->
                        <!-- <configHelp>true</configHelp>-->
                        <output>src/main/java</output>
                        <templateDirectory>${project.basedir}/templates</templateDirectory>
                        <language>spring</language>
                        <modelPackage>org.joorz.project.dto.generated</modelPackage>
                        <apiPackage>org.joorz.project.service.generated</apiPackage>
                        <configOptions>
                            <interfaceOnly>true</interfaceOnly>
                            <hideGenerationTimestamp>true</hideGenerationTimestamp>
                            <dateLibrary>java8</dateLibrary>
                            <sourceFolder>/</sourceFolder>
                        </configOptions>
                    </configuration>
                </execution>
            </executions>
        </plugin>`
Steps to reproduce
  1. Create the yaml files like mentioned above
  2. Execute maven build command
  3. Get compile errors