Infinite recursion (StackOverflowError) when validating recursive model

Issue #395 new
Ellyx Christian created an issue

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)

  1. Log in to comment