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
20.56k stars 6.28k forks source link

[BUG] Fix java heap space #18905

Open jorgerod opened 3 weeks ago

jorgerod commented 3 weeks ago

Bug Report Checklist

Description

A java heap space is being produced when generating the API.


com.fasterxml.jackson.databind.JsonMappingException: TextBuffer overrun: size reached (2147542504) exceeds maximum of 2147483647 (through reference chain: java.util.HashMap["relatedItems"]->java.util.HashMap[4]->java.util.HashMap["bundleItemSummaries"]->java.util.HashMap[4]->java.util.HashMap["detail"]->java.util.HashMap["relatedElements"]->java.util.HashMap[0]->java.util.HashMap["specific"]->java.util.HashMap[3]->java.util.HashMap["relatedItems"]->java.util.HashMap[1]->java.util.HashMap["detail"]->java.util.HashMap["colors"]->java.util.HashMap[3]->java.util.HashMap["subarticles"]->java.util.HashMap[1]->java.util.HashMap["composition"]->java.util.HashMap["parts"]->java.util.HashMap[3]->java.util.HashMap["areas"]->java.util.HashMap[4]->java.util.HashMap["components"]->java.util.HashMap[0]->java.util.HashMap["percentage"])
        at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:402)
        at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:361)
        at com.fasterxml.jackson.databind.ser.std.StdSerializer.wrapAndThrow(StdSerializer.java:323)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeOptionalFields(MapSerializer.java:871)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:760)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:720)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:35)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serializeContents(ObjectArraySerializer.java:253)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serialize(ObjectArraySerializer.java:214)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serialize(ObjectArraySerializer.java:23)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeOptionalFields(MapSerializer.java:869)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:760)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:720)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:35)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serializeContents(ObjectArraySerializer.java:253)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serialize(ObjectArraySerializer.java:214)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serialize(ObjectArraySerializer.java:23)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeOptionalFields(MapSerializer.java:869)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:760)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:720)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:35)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serializeContents(ObjectArraySerializer.java:253)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serialize(ObjectArraySerializer.java:214)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serialize(ObjectArraySerializer.java:23)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeOptionalFields(MapSerializer.java:869)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:760)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:720)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:35)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeOptionalFields(MapSerializer.java:869)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:760)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:720)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:35)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serializeContents(ObjectArraySerializer.java:253)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serialize(ObjectArraySerializer.java:214)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serialize(ObjectArraySerializer.java:23)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeOptionalFields(MapSerializer.java:869)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:760)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:720)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:35)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serializeContents(ObjectArraySerializer.java:253)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serialize(ObjectArraySerializer.java:214)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serialize(ObjectArraySerializer.java:23)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeOptionalFields(MapSerializer.java:869)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:760)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:720)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:35)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeOptionalFields(MapSerializer.java:869)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:760)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:720)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:35)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serializeContents(ObjectArraySerializer.java:253)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serialize(ObjectArraySerializer.java:214)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serialize(ObjectArraySerializer.java:23)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeOptionalFields(MapSerializer.java:869)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:760)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:720)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:35)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serializeContents(ObjectArraySerializer.java:253)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serialize(ObjectArraySerializer.java:214)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serialize(ObjectArraySerializer.java:23)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeOptionalFields(MapSerializer.java:869)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:760)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:720)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:35)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serializeContents(ObjectArraySerializer.java:253)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serialize(ObjectArraySerializer.java:214)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serialize(ObjectArraySerializer.java:23)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeOptionalFields(MapSerializer.java:869)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:760)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:720)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:35)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeOptionalFields(MapSerializer.java:869)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:760)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:720)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:35)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serializeContents(ObjectArraySerializer.java:253)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serialize(ObjectArraySerializer.java:214)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serialize(ObjectArraySerializer.java:23)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeOptionalFields(MapSerializer.java:869)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:760)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:720)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:35)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serializeContents(ObjectArraySerializer.java:253)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serialize(ObjectArraySerializer.java:214)
        at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serialize(ObjectArraySerializer.java:23)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeOptionalFields(MapSerializer.java:869)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:760)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:720)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:35)
        at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:479)
        at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:318)
        at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1572)
        at com.fasterxml.jackson.databind.ObjectWriter._writeValueAndClose(ObjectWriter.java:1273)
        at com.fasterxml.jackson.databind.ObjectWriter.writeValueAsString(ObjectWriter.java:1140)
        at io.swagger.v3.core.util.Json.pretty(Json.java:24)
        at org.openapitools.codegen.examples.ExampleGenerator.generate(ExampleGenerator.java:162)
        at org.openapitools.codegen.examples.ExampleGenerator.generateFromResponseSchema(ExampleGenerator.java:98)
        at org.openapitools.codegen.examples.ExampleGenerator.generateFromResponseSchema(ExampleGenerator.java:64)
        at org.openapitools.codegen.DefaultCodegen.fromOperation(DefaultCodegen.java:4708)
        at org.openapitools.codegen.languages.AbstractJavaCodegen.fromOperation(AbstractJavaCodegen.java:1957)
        at org.openapitools.codegen.languages.SpringCodegen.fromOperation(SpringCodegen.java:1247)
        at org.openapitools.codegen.DefaultGenerator.processOperation(DefaultGenerator.java:1502)
        at org.openapitools.codegen.DefaultGenerator.processPaths(DefaultGenerator.java:1399)
        at org.openapitools.codegen.DefaultGenerator.generateApis(DefaultGenerator.java:603)
        at org.openapitools.codegen.DefaultGenerator.generate(DefaultGenerator.java:1231)
        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)
Caused by: java.lang.IllegalStateException: TextBuffer overrun: size reached (2147542504) exceeds maximum of 2147483647
        at com.fasterxml.jackson.core.util.TextBuffer._reportBufferOverflow(TextBuffer.java:1165)
        at com.fasterxml.jackson.core.util.TextBuffer.expand(TextBuffer.java:1099)
        at com.fasterxml.jackson.core.util.TextBuffer.append(TextBuffer.java:783)
        at com.fasterxml.jackson.core.io.SegmentedStringWriter.write(SegmentedStringWriter.java:63)
        at com.fasterxml.jackson.core.json.WriterBasedJsonGenerator._flushBuffer(WriterBasedJsonGenerator.java:2060)
        at com.fasterxml.jackson.core.json.WriterBasedJsonGenerator.writeRaw(WriterBasedJsonGenerator.java:611)
        at com.fasterxml.jackson.core.util.DefaultIndenter.writeIndentation(DefaultIndenter.java:97)
        at com.fasterxml.jackson.core.util.DefaultPrettyPrinter.writeObjectEntrySeparator(DefaultPrettyPrinter.java:338)
        at com.fasterxml.jackson.core.json.WriterBasedJsonGenerator._writePPFieldName(WriterBasedJsonGenerator.java:369)
        at com.fasterxml.jackson.core.json.WriterBasedJsonGenerator._writeFieldName(WriterBasedJsonGenerator.java:172)
        at com.fasterxml.jackson.core.json.WriterBasedJsonGenerator.writeFieldName(WriterBasedJsonGenerator.java:155)
        at com.fasterxml.jackson.databind.ser.std.StdKeySerializers$StringKeySerializer.serialize(StdKeySerializers.java:302)
        at com.fasterxml.jackson.databind.ser.std.StdKeySerializers$Dynamic.serialize(StdKeySerializers.java:264)
        at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeOptionalFields(MapSerializer.java:868)
        ... 104 more

The error occurs at two points:

https://github.com/OpenAPITools/openapi-generator/blob/ab7d0cb74f6ef95bdaeafd327bbdb5d54f819175/modules/openapi-generator/src/main/java/org/openapitools/codegen/examples/ExampleGenerator.java#L115

openapi-generator version

7.5.0 & 7.6.0

OpenAPI declaration file content or url
openapi: 3.0.0
info:
  title: Item Brands
  version: 1.0.0
  description: Item Brands
paths:
  '/relatedItems':
    get:
      tags:
        - Catalog V2
      summary: Shows the items details related to the item given by the itemId.
      description: The details of the items related to the requested itemId
      operationId: relatedItems
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RelatedItemsResponse'
components:
  schemas:
    RelatedItem:
      type: object
      properties:
        bundleItemSummaries:
          type: array
          maxItems: 1024
          description: List of the items associated with the bundle.
          items:
            $ref: '#/components/schemas/ItemSummary'
      description: Related Item Info
      additionalProperties:
        false
    RelatedItemDetail:
      type: object
      properties:
        colors:
          type: array
          maxItems: 1024
          description: List of the item colors.
          items:
            $ref: '#/components/schemas/Color'
      additionalProperties:
        false
    RelatedElements:
      type: object
      properties:
        specific:
          type: array
          maxItems: 1024
          description: Related elements for specific colors.
          items:
            $ref: '#/components/schemas/ColorAndRelatedItems'
      description: Related elements
      additionalProperties:
        false
    CompositionByLocation:
      type: object
      properties:
        zones:
          type: array
          maxItems: 1024
          description: Defines  the  composition  of  the  different zones  of  a  item
          items:
            $ref: '#/components/schemas/Location'
      description: Information about composition by zone
      additionalProperties: false
    Color:
      type: object
      properties:
        compositionByLocation:
          type: array
          maxItems: 1024
          description: List of composition information about each part of the item for the color grouped by zone
          items:
            $ref: '#/components/schemas/CompositionByLocation'
        subarticles:
          type: array
          maxItems: 1024
          description: A list of subarticles
          items:
            $ref: '#/components/schemas/SubArticles'
        colFilter:
          type: array
          maxItems: 1024
          items:
            type: string
            maxLength: 1024
      description: Color information
      additionalProperties: false
    SubArticles:
      type: object
      properties:
        name:
          type: string
          maxLength: 1024
          example: 'NINO'
          description: SubArticle name
        colorId:
          type: string
          maxLength: 1024
          example: '17731'
          description: SubArticle color id
        composition:
          type: object
          required:
            - exceptions
          properties:
            parts:
              type: array
              maxItems: 1024
              items:
                $ref: '#/components/schemas/Part'
            exceptions:
              type: array
              maxItems: 1024
              items:
                type: string
                maxLength: 1024
                example: 'EXCEPTO ADORNOS'
              example:
                - 'EXCEPTO ADORNOS'
                - 'EXCLUSIVE OF ELASTIC'
          additionalProperties:
            false
      description: Information about subarticles.
      additionalProperties:
        false
    Part:
      type: object
      required:
        - areas
        - microcontents
        - reinforcements
      properties:
        description:
          type: string
          maxLength: 1024
          example: 'EXTERIOR'
          description: Part description
        areas:
          type: array
          maxItems: 1024
          items:
            $ref: '#/components/schemas/Area'
        components:
          type: array
          maxItems: 1024
          items:
            $ref: '#/components/schemas/Component'
        microcontents:
          type: array
          maxItems: 1024
          items:
            type: string
            maxLength: 1024
            example: 'viscosa'
          example:
            - 'viscosa'
            - 'algodon'
        reinforcements:
          type: array
          maxItems: 1024
          items:
            type: string
            maxLength: 1024
      description: Information about part.
      additionalProperties:
        false
    Area:
      type: object
      properties:
        components:
          type: array
          maxItems: 1024
          items:
            $ref: '#/components/schemas/Component'
        description:
          type: string
          maxLength: 1024
          example: 'Area description'
          description: Area description
        zone:
          type: string
          maxLength: 1024
          example: 'Location 1'
          description: Area zone
        zoneName:
          type: string
          maxLength: 1024
          example: 'Location name 1'
          description: Area zone name
      description: Information about area.
      additionalProperties:
        false
    Component:
      type: object
      properties:
        material:
          type: string
          maxLength: 1024
          example: 'algodon'
          description: Component material
        percentage:
          type: string
          maxLength: 1024
          example: '100%'
          description: Component percentage
      description: Information about component.
      additionalProperties:
        false
    ItemSummary:
      type: object
      required:
        - itemType
      properties:
        detail:
          $ref: '#/components/schemas/ItemDetail'
      description: Item Summary Info
      additionalProperties:
        false
    ColorAndRelatedItems:
      type: object
      properties:
        relatedItems:
          type: array
          maxItems: 1024
          description: List of related items.
          items:
            $ref: '#/components/schemas/CatentryIdWithColor'
      description: Item color and related items
      additionalProperties:
        false
    Location:
      type: object
      properties:
        zone:
          type: string
          maxLength: 1024
          example: 'zone 1'
          description: zone identifier
        zoneName:
          type: string
          maxLength: 1024
          example: '56% name 1'
          description: zone name
      description: Information about zone
      additionalProperties:
        false
    CatentryIdWithColor:
      type: object
      properties:
        detail:
          $ref: '#/components/schemas/RelatedItemDetail'
      description: CatentryId and color
      additionalProperties:
        false
    ItemDetail:
      type: object
      required:
        - colors
        - xmediaDefaultSet
        - relatedItems
        - defaultImageType
      properties:
        relatedElements:
          type: array
          maxItems: 1024
          items:
            $ref: '#/components/schemas/RelatedElements'
      description: Item Detail Info.
      additionalProperties:
        false
    RelatedItemsResponse:
      type: object
      description: The response object from relatedItems.
      required:
        - relatedItems
      properties:
        relatedItems:
          type: array
          maxItems: 1024
          description: A list of related items details.
          items:
            $ref: '#/components/schemas/RelatedItem'
      additionalProperties:
        false
Generation Details
java -jar openapi-generator-cli-7.6.0.jar generate -g spring -i spec.yml -o out --additional-properties library=spring-boot,openApiNullable=false
Related issues/PRs
Suggest a fix