OpenAPITools / openapi-generator

OpenAPI Generator allows generation of API client libraries (SDK generation), server stubs, documentation and configuration automatically given an OpenAPI Spec (v2, v3)
https://openapi-generator.tech
Apache License 2.0
21.64k stars 6.53k forks source link

[BUG][C#]Additional logging to debug OOM exception #16347

Open PeterVaccaITR opened 1 year ago

PeterVaccaITR commented 1 year ago

Bug Report Checklist

Description
openapi-generator version

2.7.0

OpenAPI declaration file content or url

https://gist.github.com/PeterVaccaITR/04c4d1875096acdca665b49edfa72c76.js

Generation Details

"swagger:gen:lp-api:mac": "set JAVA_OPTS=\"%JAVA_OPTS% -Dlog.level=debug -Dio.swagger.parser.util.RemoteUrl.trustAll=true -Dio.swagger.v3.parser.util.RemoteUrl.trustAll=true\" && npx @openapitools/openapi-generator-cli generate -i https://localhost:7176/v3/apis/il-inview/swagger/swagger.json --additional-properties=withInterfaces=true,modelPropertyNaming=original,withSeparateModelsAndApi=true,legacyDiscriminatorBehavior=false --skip-validate-spec --api-package lp-offering-api --model-package models -g typescript-axios -o ./src/swagger/lp-offering-api",

Steps to reproduce

Running the above results in a OOM heap space exception. I don't see any additional logging with the -Dlog.level=debug

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at java.base/java.util.Arrays.copyOfRange(Arrays.java:3822) at java.base/java.lang.String.<init>(String.java:4531) at java.base/java.lang.String.<init>(String.java:1487) at java.base/java.lang.StringBuilder.toString(StringBuilder.java:453) at com.fasterxml.jackson.core.util.TextBuffer.contentsAsString(TextBuffer.java:465) at com.fasterxml.jackson.core.io.SegmentedStringWriter.getAndClear(SegmentedStringWriter.java:85) at com.fasterxml.jackson.databind.ObjectWriter.writeValueAsString(ObjectWriter.java:1146) at io.swagger.v3.core.util.Json.pretty(Json.java:24) at org.openapitools.codegen.DefaultCodegen.fromModel(DefaultCodegen.java:2982) at org.openapitools.codegen.DefaultCodegen.handleMethodResponse(DefaultCodegen.java:4271) at org.openapitools.codegen.DefaultCodegen.fromOperation(DefaultCodegen.java:4435) at org.openapitools.codegen.DefaultGenerator.processOperation(DefaultGenerator.java:1189) at org.openapitools.codegen.DefaultGenerator.processPaths(DefaultGenerator.java:1115) at org.openapitools.codegen.DefaultGenerator.generateApis(DefaultGenerator.java:586) at org.openapitools.codegen.DefaultGenerator.generate(DefaultGenerator.java:949) at org.openapitools.codegen.cmd.Generate.execute(Generate.java:487) at org.openapitools.codegen.cmd.OpenApiGeneratorCommand.run(OpenApiGeneratorCommand.java:32) at org.openapitools.codegen.OpenAPIGenerator.main(OpenAPIGenerator.java:66)

Related issues/PRs
Suggest a fix
PeterVaccaITR commented 1 year ago

As an additional note, commenting out the Search method from BulkDownloadController makes the following changes and allows for the swagger generation to complete.

diff swagger_bad.json swagger_good.json

< "/v3/apis/il-inview/bulkdownload/search": { < "get": { < "tags": [ < "BulkDownload" < ], < "summary": "Search BulkDownload using available filters.", < "parameters": [ < { < "name": "IncludeActive", < "in": "query", < "schema": { < "type": "boolean" < } < }, < { < "name": "Offset", < "in": "query", < "schema": { < "type": "integer", < "format": "int32", < "default": 0 < } < }, < { < "name": "Limit", < "in": "query", < "schema": { < "type": "integer", < "format": "int32", < "default": 20 < } < }, < { < "name": "Sort.Field", < "in": "query", < "schema": { < "type": "string", < "default": "name" < } < }, < { < "name": "Sort.SortOrder", < "in": "query", < "schema": { < "$ref": "#/components/schemas/SortOrder" < } < }, < { < "name": "Fields", < "in": "query", < "schema": { < "uniqueItems": true, < "type": "array", < "items": { < "type": "string" < } < } < }, < { < "name": "Filter", < "in": "query", < "schema": { < "type": "string" < } < }, < { < "name": "Portal-Id", < "in": "header", < "description": "Header to set Portal Id for all CRUD requests", < "required": true, < "schema": { < "type": "string" < }, < "example": "b8d36f60-f86c-11ec-b939-0242ac120002" < } < ], < "responses": { < "500": { < "description": "Server Error", < "content": { < "application/json": { < "schema": { < "$ref": "#/components/schemas/Result" < } < } < } < }, < "400": { < "description": "Bad Request", < "content": { < "application/json": { < "schema": { < "$ref": "#/components/schemas/Result" < } < } < } < }, < "200": { < "description": "Success", < "content": { < "application/json": { < "schema": { < "$ref": "#/components/schemas/BulkDownloadPaginatedResult" < } < } < } < } < } < } < }, 16064,16082d15953 < "BulkDownloadPaginatedResult": { < "type": "object", < "properties": { < "_meta": { < "$ref": "#/components/schemas/ResultMetadata" < }, < "_status": { < "$ref": "#/components/schemas/ResultPageStatus" < }, < "data": { < "type": "array", < "items": { < "$ref": "#/components/schemas/BulkDownload" < }, < "nullable": true < } < }, < "additionalProperties": false < },

the above is the only difference in the spec file.

devhl-labs commented 1 year ago

Why is c# in the description when the config says typescript?

PeterVaccaITR commented 1 year ago

Apologies. The API source code that produces the spec is C#, the code we are generating with openapi is typescript.