openapi-generator icon indicating copy to clipboard operation
openapi-generator copied to clipboard

Repeated `null` in "anyOf" selector throws exception

Open brent-statsig opened this issue 1 year ago • 2 comments

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" }
  ]
},

brent-statsig avatar May 22 '24 04:05 brent-statsig

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!

brent-statsig avatar May 22 '24 04:05 brent-statsig

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

wing328 avatar May 22 '24 08:05 wing328

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?

wing328 avatar May 26 '24 07:05 wing328

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)

newsgrep avatar Jun 24 '24 18:06 newsgrep

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)

wing328 avatar Jun 25 '24 10:06 wing328