- edited description
Infinite recursion (StackOverflowError) when validating recursive model
Issue #395
new
we have model definition like below, Characteristic has relationship to it own (recursive)
{
"components": {
"schemas": {
"Characteristic": {
"title": "Characteristic",
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"characteristicRelationships": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CharacteristicRelationship"
}
}
}
},
"CharacteristicRelationship": {
"title": "CharacteristicRelationship",
"type": "object",
"properties": {
"type": {
"type": "string"
},
"characteristic": {
"$ref": "#/components/schemas/Characteristic"
}
}
}
}
}
}
An error occur when creating validator for the API spec (OpenAPI v3).
java.lang.IllegalArgumentException: Infinite recursion (StackOverflowError) (through reference chain: io.swagger.v3.oas.models.media.Schema["properties"]->java.util.LinkedHashMap["class"]->io.swagger.v3.oas.models.media.Schema["properties"]
....
at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:4314)
at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:4245)
at com.atlassian.oai.validator.schema.SchemaValidator.lambda$new$0(SchemaValidator.java:90)
at java.base/java.util.Optional.map(Optional.java:265)
at com.atlassian.oai.validator.schema.SchemaValidator.<init>(SchemaValidator.java:90)
at com.atlassian.oai.validator.OpenApiInteractionValidator.<init>(OpenApiInteractionValidator.java:154)
at com.atlassian.oai.validator.OpenApiInteractionValidator.<init>(OpenApiInteractionValidator.java:46)
at com.atlassian.oai.validator.OpenApiInteractionValidator$Builder.build(OpenApiInteractionValidator.java:624)
i used this code to create validation object
final ParseOptions parseOptions = new ParseOptions();
parseOptions.setResolveFully(true);
parseOptions.setResolveCombinators(true);
final OpenApiInteractionValidator validator = OpenApiInteractionValidator
.createForInlineApiSpecification(this.specString)
.withParseOptions(parseOptions)
.build();
Comments (1)
-
reporter - Log in to comment