OpenAPITools / OpenAPITools/openapi-generator
[BUG] Fix java heap space
Open
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
- When generating the Yaml (which I won't use for anything)
https://github.com/OpenAPITools/openapi-generator/blob/ab7d0cb74f6ef95bdaeafd327bbdb5d54f819175/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java#L8041-L8046
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
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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