OpenAPITools / OpenAPITools/openapi-generator

[BUG] Fix java heap space

Open
#18,905 3 comments 5 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Issue: Bug
Dominant language
Java
Stars
26.8k
Forks
7.7k
PR merge metrics
PR metrics pending

Description

Bug Report Checklist
  • Have you provided a full/minimal spec to reproduce the issue?
  • Have you validated the input using an OpenAPI validator (example)?
  • Have you tested with the latest master to confirm the issue still exists?
  • Have you searched for related issues/PRs?
  • What's the actual output vs expected output?
  • [Optional] Sponsorship to speed up the bug fix or feature request (example)
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:

  • When generating the example

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

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at the Json.pretty call and Jackson ObjectWriter.writeValueAsString shown in the stack trace, then trace how the OpenAPI generator serializes the reported input during API generation. The issue does not include the reproducible specification, affected file, or test; done means generation completes without the Java heap-space or JsonMappingException failure.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
api, tooling
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
28/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.