Repeated `null` in "anyOf" selector throws exception
Description
java.util.NoSuchElementException
at java.base/java.util.LinkedHashMap$LinkedHashIterator.nextNode(LinkedHashMap.java:721)
at java.base/java.util.LinkedHashMap$LinkedKeyIterator.next(LinkedHashMap.java:741)
at org.openapitools.codegen.utils.ModelUtils.getType(ModelUtils.java:2142)
at org.openapitools.codegen.OpenAPINormalizer.processSimplifyAnyOf(OpenAPINormalizer.java:1071)
at org.openapitools.codegen.OpenAPINormalizer.normalizeAnyOf(OpenAPINormalizer.java:663)
at org.openapitools.codegen.OpenAPINormalizer.normalizeSchema(OpenAPINormalizer.java:522)
at org.openapitools.codegen.OpenAPINormalizer.normalizeProperties(OpenAPINormalizer.java:599)
at org.openapitools.codegen.OpenAPINormalizer.normalizeSchema(OpenAPINormalizer.java:555)
at org.openapitools.codegen.OpenAPINormalizer.processNormalize31Spec(OpenAPINormalizer.java:1254)
at org.openapitools.codegen.OpenAPINormalizer.normalizeArraySchema(OpenAPINormalizer.java:570)
at org.openapitools.codegen.OpenAPINormalizer.normalizeSchema(OpenAPINormalizer.java:513)
at org.openapitools.codegen.OpenAPINormalizer.normalizeProperties(OpenAPINormalizer.java:599)
at org.openapitools.codegen.OpenAPINormalizer.normalizeSchema(OpenAPINormalizer.java:555)
at org.openapitools.codegen.OpenAPINormalizer.normalizeComponentsSchemas(OpenAPINormalizer.java:484)
at org.openapitools.codegen.OpenAPINormalizer.normalize(OpenAPINormalizer.java:287)
at org.openapitools.codegen.DefaultGenerator.configureGeneratorProperties(DefaultGenerator.java:274)
at org.openapitools.codegen.DefaultGenerator.generate(DefaultGenerator.java:1214)
at org.openapitools.codegen.cmd.Generate.execute(Generate.java:535)
at org.openapitools.codegen.cmd.OpenApiGeneratorCommand.run(OpenApiGeneratorCommand.java:32)
at org.openapitools.codegen.OpenAPIGenerator.main(OpenAPIGenerator.java:66)
openapi-generator version
openapi-generator-cli 7.5.0 commit : cce4139
OpenAPI declaration file content or url
Caused by this field with repeated types:
"targetValue": {
"anyOf": [
{ "type": "array", "items": { "type": "string" } },
{ "type": "array", "items": { "type": "number" } },
{ "type": "string" },
{ "type": "number" },
{ "type": "null" },
{ "type": "null" }
]
},
The broken API definition is being generated by https://github.com/asteasolutions/zod-to-openapi, which I'm creating an issue for as well - just figured I would flag since this seems like an unexpected behavior!
agreed with you that shouldn't throw an exception. i'll take a look later this week
as a workaround, please manually remove the duplicated type: null for the time being
i tried to repeat the issue using the latest master but couldn't
can you please give it another try with the latest master or v7.6.0?
I was able to reproduce smth similar on 7.6.0 and 7.7.0-20240520.095624-1.jar. See line 42 in myapi_2.json
[main] ERROR o.o.codegen.DefaultGenerator - An exception occurred in OpenAPI Normalizer. Please report the issue via https://github.com/openapitools/openapi-generator/issues/new/:
[main] ERROR o.o.codegen.DefaultGenerator - An exception occurred in OpenAPI Normalizer. Please report the issue via https://github.com/openapitools/openapi-generator/issues/new/:
java.util.NoSuchElementException
at java.base/java.util.LinkedHashMap$LinkedHashIterator.nextNode(LinkedHashMap.java:758)
at java.base/java.util.LinkedHashMap$LinkedKeyIterator.next(LinkedHashMap.java:778)
at org.openapitools.codegen.utils.ModelUtils.getType(ModelUtils.java:2141)
at org.openapitools.codegen.utils.ModelUtils.isArraySchema(ModelUtils.java:594)
at org.openapitools.codegen.OpenAPINormalizer.normalizeSchema(OpenAPINormalizer.java:512)
at org.openapitools.codegen.OpenAPINormalizer.normalizeAnyOf(OpenAPINormalizer.java:659)
at org.openapitools.codegen.OpenAPINormalizer.normalizeSchema(OpenAPINormalizer.java:522)
at org.openapitools.codegen.OpenAPINormalizer.normalizeContent(OpenAPINormalizer.java:367)
at org.openapitools.codegen.OpenAPINormalizer.normalizeResponses(OpenAPINormalizer.java:438)
at org.openapitools.codegen.OpenAPINormalizer.normalizePaths(OpenAPINormalizer.java:330)
at org.openapitools.codegen.OpenAPINormalizer.normalize(OpenAPINormalizer.java:286)
at org.openapitools.codegen.DefaultGenerator.configureGeneratorProperties(DefaultGenerator.java:279)
at org.openapitools.codegen.DefaultGenerator.generate(DefaultGenerator.java:1289)
at org.openapitools.codegen.cmd.Generate.execute(Generate.java:535)
at org.openapitools.codegen.cmd.OpenApiGeneratorCommand.run(OpenApiGeneratorCommand.java:32)
at org.openapitools.codegen.OpenAPIGenerator.main(OpenAPIGenerator.java:66)
Exception in thread "main" java.util.NoSuchElementException
at java.base/java.util.LinkedHashMap$LinkedHashIterator.nextNode(LinkedHashMap.java:758)
at java.base/java.util.LinkedHashMap$LinkedKeyIterator.next(LinkedHashMap.java:778)
at org.openapitools.codegen.utils.ModelUtils.getType(ModelUtils.java:2141)
at org.openapitools.codegen.utils.ModelUtils.isArraySchema(ModelUtils.java:594)
at org.openapitools.codegen.InlineModelResolver.gatherInlineModels(InlineModelResolver.java:341)
at org.openapitools.codegen.InlineModelResolver.gatherInlineModels(InlineModelResolver.java:407)
at org.openapitools.codegen.InlineModelResolver.flattenContent(InlineModelResolver.java:471)
at org.openapitools.codegen.InlineModelResolver.flattenResponses(InlineModelResolver.java:555)
at org.openapitools.codegen.InlineModelResolver.flattenPaths(InlineModelResolver.java:149)
at org.openapitools.codegen.InlineModelResolver.flatten(InlineModelResolver.java:108)
at org.openapitools.codegen.DefaultGenerator.configureGeneratorProperties(DefaultGenerator.java:292)
at org.openapitools.codegen.DefaultGenerator.generate(DefaultGenerator.java:1289)
at org.openapitools.codegen.cmd.Generate.execute(Generate.java:535)
at org.openapitools.codegen.cmd.OpenApiGeneratorCommand.run(OpenApiGeneratorCommand.java:32)
at org.openapitools.codegen.OpenAPIGenerator.main(OpenAPIGenerator.java:66)
should be fixed via https://github.com/OpenAPITools/openapi-generator/pull/19014
please give it a try with the latest master (snapshot version mentioned in the project's readme will be published later as part of the travis ci workflow)