discord/discord-api-spec

Fails to generate full client with open api version 3.1.0

Closed this issue · 3 comments

OpenAPITools/openapi-generator#14232

Im getting this same issue while trying to generate a client in typescript.

I edited the json spec to use 3.0.3 (which seems to fix the generation and everything generates correctly)

If theres more info needed, im willing to share
Possible Solution

  • spec json should be reverted to open api version 3.0.3?
    I installed the open api generator via npm.
npm i @openapitools/openapi-generator-cli

The full script I run

openapi-generator-cli generate -i discord-api-spec/specs/openapi.json -g typescript-fetch -o openapi --skip-validate-spec --additional-properties=supportsES6=true,typescriptThreePlus=true
[main] ERROR i.s.v.p.reference.ReferenceVisitor - Error resolving schema #/components/schemas/ApplicationFormPartial
java.lang.IllegalArgumentException: Cannot deserialize value of type `java.lang.Boolean` from Object value (token `JsonToken.START_OBJECT`)
 at [Source: UNKNOWN; byte offset: #UNKNOWN]
        at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:4449)
        at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:4380)
        at io.swagger.v3.core.util.ModelDeserializer.deserializeJsonSchema(ModelDeserializer.java:157)
        at io.swagger.v3.core.util.ModelDeserializer.deserialize(ModelDeserializer.java:44)
        at io.swagger.v3.core.util.ModelDeserializer.deserialize(ModelDeserializer.java:33)
        at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)
        at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4730)
        at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3677)
        at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3645)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.deepcopy(OpenAPI31Traverser.java:922)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseSchema(OpenAPI31Traverser.java:914)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseSchemaMap(OpenAPI31Traverser.java:946)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseSchema(OpenAPI31Traverser.java:800)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseSchemaMap(OpenAPI31Traverser.java:946)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseSchema(OpenAPI31Traverser.java:800)
        at io.swagger.v3.parser.reference.ReferenceVisitor.resolveSchemaRef(ReferenceVisitor.java:233)
        at io.swagger.v3.parser.reference.ReferenceVisitor.visitSchema(ReferenceVisitor.java:120)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseSchema(OpenAPI31Traverser.java:790)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseMediaType(OpenAPI31Traverser.java:603)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseMap(OpenAPI31Traverser.java:933)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseRequestBody(OpenAPI31Traverser.java:346)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseOperation(OpenAPI31Traverser.java:229)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traversePathItem(OpenAPI31Traverser.java:409)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseMap(OpenAPI31Traverser.java:933)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traversePaths(OpenAPI31Traverser.java:197)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseOpenApi(OpenAPI31Traverser.java:124)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverse(OpenAPI31Traverser.java:65)
        at io.swagger.v3.parser.reference.OpenAPIDereferencer31.dereference(OpenAPIDereferencer31.java:74)
        at io.swagger.v3.parser.OpenAPIV3Parser.resolve(OpenAPIV3Parser.java:221)
        at io.swagger.v3.parser.OpenAPIV3Parser.readContents(OpenAPIV3Parser.java:178)
        at io.swagger.v3.parser.OpenAPIV3Parser.readLocation(OpenAPIV3Parser.java:94)
        at io.swagger.parser.OpenAPIParser.readLocation(OpenAPIParser.java:16)
        at org.openapitools.codegen.config.CodegenConfigurator.toContext(CodegenConfigurator.java:589)
        at org.openapitools.codegen.config.CodegenConfigurator.toClientOptInput(CodegenConfigurator.java:647)
        at org.openapitools.codegen.cmd.Generate.execute(Generate.java:479)
        at org.openapitools.codegen.cmd.OpenApiGeneratorCommand.run(OpenApiGeneratorCommand.java:32)
        at org.openapitools.codegen.OpenAPIGenerator.main(OpenAPIGenerator.java:66)
Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.lang.Boolean` from Object value (token
 `JsonToken.START_OBJECT`)

These shouldn't work in a 3.0.3 tool.

https://spec.openapis.org/oas/v3.0.3

For a specific example, the above disallows "null" type. The specs use that type.

Ah interesting, you're right. I switched back to 3.1.0 , but it seems like I don't get the entire spec generated due to the above error

That tool doesn't support 3.1.0 unfortunately. We don't plan to downgrade our spec.