Skip to content

[QUESTION] [JAVA] possible bug openapi-generator-maven-plugin handling of different discriminator values mapping to the same schema #21766

@IgorMaj

Description

@IgorMaj

Hello, I have the following problem as of 7.14.0, which is also present on the latest master. The issue is not present in 7.13.0 and earlier.

Here is my snippet:

      responses:
        '200':
          description: "List of all the objects."
          content:
            application/json:
              schema:
                type: array
                items:
                  oneOf:
                    - $ref: '#/components/schemas/TypeA'
                    - $ref: '#/components/schemas/TypeB'
                  discriminator:
                    propertyName: discriminatorProperty
                    mapping:
                      ONE: '#/components/schemas/TypeA'
                      TWO: '#/components/schemas/TypeB'
                      THREE: '#/components/schemas/TypeB'
                      FOUR: '#/components/schemas/TypeB'
                      FIVE: '#/components/schemas/TypeB'

When trying to generate openapi controllers and api objects I get the following error:

java.lang.IllegalStateException: Duplicate key #/components/schemas/TypeB (attempted merging values TWO and THREE)
    at java.util.stream.Collectors.duplicateKeyException (Collectors.java:135)
    at java.util.stream.Collectors.lambda$uniqKeysMapAccumulator$1 (Collectors.java:182)
    at java.util.stream.ReduceOps$3ReducingSink.accept (ReduceOps.java:169)
    at java.util.Iterator.forEachRemaining (Iterator.java:133)
    at java.util.Spliterators$IteratorSpliterator.forEachRemaining (Spliterators.java:1939)
    at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:509)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto (AbstractPipeline.java:499)
    at java.util.stream.ReduceOps$ReduceOp.evaluateSequential (ReduceOps.java:921)
    at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.collect (ReferencePipeline.java:682)
    at io.swagger.v3.parser.processors.ExternalRefProcessor.processSchema (ExternalRefProcessor.java:253)
    at io.swagger.v3.parser.processors.ExternalRefProcessor.processSchema (ExternalRefProcessor.java:244)
    at io.swagger.v3.parser.processors.ExternalRefProcessor.processRefSchemaObject (ExternalRefProcessor.java:1009)
    at io.swagger.v3.parser.processors.ExternalRefProcessor.processPathItem (ExternalRefProcessor.java:350)
    at io.swagger.v3.parser.processors.ExternalRefProcessor.processRefToExternalPathItem (ExternalRefProcessor.java:325)
    at io.swagger.v3.parser.processors.PathsProcessor.processReferencePath (PathsProcessor.java:346)
    at io.swagger.v3.parser.processors.PathsProcessor.processPaths (PathsProcessor.java:68)
    at io.swagger.v3.parser.OpenAPIResolver.resolve (OpenAPIResolver.java:72)
    at io.swagger.v3.parser.OpenAPIResolver.resolve (OpenAPIResolver.java:59)
    at io.swagger.v3.parser.OpenAPIV3Parser.resolve (OpenAPIV3Parser.java:240)
    at io.swagger.v3.parser.OpenAPIV3Parser.readContents (OpenAPIV3Parser.java:183)
    at io.swagger.v3.parser.OpenAPIV3Parser.readLocation (OpenAPIV3Parser.java:97)
    at io.swagger.parser.OpenAPIParser.readLocation (OpenAPIParser.java:16)
    at org.openapitools.codegen.config.CodegenConfigurator.toContext (CodegenConfigurator.java:687)
    at org.openapitools.codegen.config.CodegenConfigurator.toClientOptInput (CodegenConfigurator.java:745)
    at org.openapitools.codegen.plugin.CodeGenMojo.execute (CodeGenMojo.java:972)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
    at jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:103)
    at java.lang.reflect.Method.invoke (Method.java:580)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)

Is this expected? Can I avoid this in some other way, except creating TypeC, TypeD etc?

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