Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can't parse OpenAPI with circular references #255

Open
mbrodowski opened this issue Jul 16, 2020 · 0 comments
Open

Can't parse OpenAPI with circular references #255

mbrodowski opened this issue Jul 16, 2020 · 0 comments

Comments

@mbrodowski
Copy link

mbrodowski commented Jul 16, 2020

I'm trying to parse API containing a circular relationship, like following:

{
  "openapi": "3.0.0",
  "info": {
    "description": "Products",
    "version": "1.0.0",
    "title": "Product API",
    "contact": {
      "name": "Test",
      "email": "Test"
    },
    "license": {
      "name": "Proprietary license"
    }
  },
  "tags": [],
  "security": [
    {
      "accessToken": []
    },
    {
      "apiKey": []
    }
  ],
  "paths": {
    "/products": {
      "get": {
        "tags": [
          "Product"
        ],
        "summary": "Search Products",
        "operationId": "searchProducts",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {},
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Product"
                  }
                }
              }
            }
          }
        },
        "deprecated": false
      }
    }
  },
  "servers": [],
  "components": {
    "securitySchemes": {
      "accessToken": {
        "description": "Access token in JWT or opaque format sent in HTTP Authorization header, Bearer schema",
        "type": "apiKey",
        "name": "Authorization",
        "in": "header"
      },
      "apiKey": {
        "description": "API key for technical accounts (opaque format) sent in HTTP Authorization header, no schema",
        "type": "apiKey",
        "name": "Authorization",
        "in": "header"
      }
    },
    "schemas": {
      "Product": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier for the product"
          },
          "href": {
            "type": "string",
            "description": "Reference of the product"
          },
          "name": {
            "type": "string",
            "description": "Name of the product "
          },
          "description": {
            "type": "string",
            "description": "Description of the product "
          },
          "productRelationships": {
            "type": "array",
            "description": "A list of product relationships",
            "items": {
              "$ref": "#/components/schemas/ProductRelationship"
            }
          }
        },
        "title": "Product",
        "description": "Product"
      },
      "ProductRelationship": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "The direction of the relationship"
          },
          "product": {
            "$ref": "#/components/schemas/Product"
          }
        },
        "title": "ProductRelationship",
        "description": "Indicates all relationships between the products"
      }
    }
  }
}

I'm getting java.lang.StackOverflowError

java.lang.StackOverflowError: null
	at java.base/java.util.HashMap.tableSizeFor(HashMap.java:379) ~[na:na]
	at java.base/java.util.HashMap.<init>(HashMap.java:452) ~[na:na]
	at java.base/java.util.HashMap.<init>(HashMap.java:463) ~[na:na]
	at java.base/java.util.HashSet.<init>(HashSet.java:119) ~[na:na]
	at com.reprezen.jsonoverlay.SerializationOptions.plus(SerializationOptions.java:38) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.SerializationOptions.plus(SerializationOptions.java:44) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.ListOverlay._toJsonInternal(ListOverlay.java:70) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:251) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.PropertiesOverlay._toJsonInternal(PropertiesOverlay.java:298) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:251) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.MapOverlay._toJsonInternal(MapOverlay.java:75) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:251) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.PropertiesOverlay._toJsonInternal(PropertiesOverlay.java:298) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:251) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:248) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.MapOverlay._toJsonInternal(MapOverlay.java:75) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:251) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.PropertiesOverlay._toJsonInternal(PropertiesOverlay.java:298) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:251) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:248) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.PropertiesOverlay._toJsonInternal(PropertiesOverlay.java:298) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:251) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.MapOverlay._toJsonInternal(MapOverlay.java:75) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:251) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.PropertiesOverlay._toJsonInternal(PropertiesOverlay.java:298) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:251) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:248) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.MapOverlay._toJsonInternal(MapOverlay.java:75) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:251) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.PropertiesOverlay._toJsonInternal(PropertiesOverlay.java:298) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:251) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:248) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.PropertiesOverlay._toJsonInternal(PropertiesOverlay.java:298) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:251) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.MapOverlay._toJsonInternal(MapOverlay.java:75) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:251) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.PropertiesOverlay._toJsonInternal(PropertiesOverlay.java:298) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:251) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:248) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.MapOverlay._toJsonInternal(MapOverlay.java:75) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:251) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.PropertiesOverlay._toJsonInternal(PropertiesOverlay.java:298) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:251) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:248) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.PropertiesOverlay._toJsonInternal(PropertiesOverlay.java:298) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:251) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.MapOverlay._toJsonInternal(MapOverlay.java:75) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:251) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.PropertiesOverlay._toJsonInternal(PropertiesOverlay.java:298) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:251) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:248) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.MapOverlay._toJsonInternal(MapOverlay.java:75) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:251) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.PropertiesOverlay._toJsonInternal(PropertiesOverlay.java:298) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:251) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:248) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.PropertiesOverlay._toJsonInternal(PropertiesOverlay.java:298) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:251) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.MapOverlay._toJsonInternal(MapOverlay.java:75) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:251) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.PropertiesOverlay._toJsonInternal(PropertiesOverlay.java:298) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:251) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:248) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.MapOverlay._toJsonInternal(MapOverlay.java:75) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:251) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.PropertiesOverlay._toJsonInternal(PropertiesOverlay.java:298) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:251) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:248) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.PropertiesOverlay._toJsonInternal(PropertiesOverlay.java:298) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:251) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.MapOverlay._toJsonInternal(MapOverlay.java:75) ~[jsonoverlay-4.0.4.jar:na]
	at com.reprezen.jsonoverlay.JsonOverlay._toJson(JsonOverlay.java:251) ~[jsonoverlay-4.0.4.jar:na]

Is there any way around this problem?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant