Skip to content

Uncaught TypeError: Cannot read property '$ref' of undefined #2279

@smadduri

Description

@smadduri

When reporting a bug, please provide the following details:

  • swagger-ui version 2.0

I downloaded the latest distro from master and hosted it along side my webapp. I tested it on a "Ping" API with a plain text response and it worked fine. Then I started adding annotations to my other APIs.
I see this error.
Here is the swagger.json that is generated:

{
    "swagger": "2.0",
    "info": {
        "version": "1.0.0",
        "title": ""
    },
    "host": "localhost:8080",
    "basePath": "/api/v1",
    "tags": [{
        "name": "user"
    }, {
        "name": "ping"
    }],
    "schemes": ["http"],
    "paths": {
        "/ping": {
            "get": {
                "tags": ["ping"],
                "summary": "Health Check API",
                "description": "",
                "operationId": "sayPlainTextHello",
                "produces": ["text/plain"],
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "successful operation",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/users": {
            "post": {
                "tags": ["user"],
                "operationId": "createUser",
                "parameters": [{
                    "in": "body",
                    "name": "body",
                    "required": false,
                    "schema": {
                        "$ref": "#/definitions/UserDTO"
                    }
                }],
                "responses": {
                    "200": {
                        "description": "successful operation",
                        "schema": {
                            "$ref": "#/definitions/User"
                        },
                        "headers": {}
                    }
                }
            }
        },
        "/users/{email}": {
            "get": {
                "tags": ["user"],
                "operationId": "getUserByEmail",
                "parameters": [{
                    "name": "email",
                    "in": "path",
                    "required": true,
                    "type": "string"
                }],
                "responses": {
                    "200": {
                        "description": "successful operation",
                        "schema": {
                            "$ref": "#/definitions/User"
                        },
                        "headers": {}
                    }
                }
            }
        }
    },
    "definitions": {
        "Comment": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "integer",
                    "format": "int64"
                },
                "userId": {
                    "type": "integer",
                    "format": "int64"
                },
                "comment": {
                    "type": "string"
                },
                "commentDate": {
                    "type": "string",
                    "format": "date-time"
                }
            }
        },
        "Destination": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "integer",
                    "format": "int64"
                },
                "name": {
                    "type": "string"
                },
                "latitude": {
                    "type": "number",
                    "format": "double"
                },
                "longitude": {
                    "type": "number",
                    "format": "double"
                },
                "locations": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/Location"
                    }
                },
                "sequenceNum": {
                    "type": "integer",
                    "format": "int32"
                },
                "dayNum": {
                    "type": "integer",
                    "format": "int32"
                },
                "todos": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/Todo"
                    }
                }
            }
        },
        "Todo": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "integer",
                    "format": "int64"
                },
                "todoDescription": {
                    "type": "string"
                },
                "attraction": {
                    "type": "string"
                }
            }
        },
        "TripHistory": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "integer",
                    "format": "int64"
                },
                "itineraryId": {
                    "type": "integer",
                    "format": "int64"
                },
                "tripStartDate": {
                    "type": "string",
                    "format": "date-time"
                },
                "rating": {
                    "type": "integer",
                    "format": "int32"
                }
            }
        },
        "User": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "integer",
                    "format": "int64"
                },
                "facebookHandle": {
                    "type": "string"
                },
                "firstName": {
                    "type": "string"
                },
                "lastName": {
                    "type": "string"
                },
                "email": {
                    "type": "string"
                },
                "password": {
                    "type": "string"
                },
                "accountStatus": {
                    "type": "string"
                },
                "accountType": {
                    "type": "string"
                },
                "accountCreationDate": {
                    "type": "string",
                    "format": "date-time"
                },
                "lastLoginTime": {
                    "type": "string",
                    "format": "date-time"
                },
                "faqsAsked": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/Faq"
                    }
                },
                "faqsAnswered": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/FaqResponse"
                    }
                },
                "itineraries": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/Itinerary"
                    }
                },
                "likedItineraries": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/ItineraryLike"
                    }
                },
                "tripHistory": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/TripHistory"
                    }
                }
            }
        },
        "FaqResponse": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "integer",
                    "format": "int64"
                },
                "answer": {
                    "type": "string"
                }
            }
        },
        "Faq": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "integer",
                    "format": "int64"
                },
                "itinerary": {
                    "$ref": "#/definitions/Itinerary"
                },
                "question": {
                    "type": "string"
                },
                "asker": {
                    "$ref": "#/definitions/User"
                },
                "answers": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/FaqResponse"
                    }
                }
            }
        },
        "UserDTO": {
            "type": "object",
            "properties": {
                "email": {
                    "type": "string"
                },
                "password": {
                    "type": "string"
                }
            }
        },
        "Itinerary": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "integer",
                    "format": "int64"
                },
                "itineraryName": {
                    "type": "string"
                },
                "startDate": {
                    "type": "string",
                    "format": "date-time"
                },
                "endDate": {
                    "type": "string",
                    "format": "date-time"
                },
                "numOfDays": {
                    "type": "integer",
                    "format": "int32"
                },
                "numOfAdults": {
                    "type": "integer",
                    "format": "int32"
                },
                "numofKids": {
                    "type": "integer",
                    "format": "int32"
                },
                "numofLikes": {
                    "type": "integer",
                    "format": "int64"
                },
                "numOfViews": {
                    "type": "integer",
                    "format": "int64"
                },
                "status": {
                    "type": "string"
                },
                "createDate": {
                    "type": "string",
                    "format": "date-time"
                },
                "users": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/User"
                    }
                },
                "itineraryLink": {
                    "type": "string"
                },
                "comments": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/Comment"
                    }
                },
                "faqs": {
                    "type": "array"
                },
                "destinations": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/Destination"
                    }
                },
                "public": {
                    "type": "boolean",
                    "default": false
                }
            }
        },
        "ItineraryLike": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "integer",
                    "format": "int64"
                },
                "likeType": {
                    "type": "string"
                },
                "itineraryId": {
                    "type": "integer",
                    "format": "int64"
                },
                "likedOnDate": {
                    "type": "string",
                    "format": "date-time"
                }
            }
        },
        "Location": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "integer",
                    "format": "int64"
                },
                "name": {
                    "type": "string"
                },
                "locationType": {
                    "type": "string"
                }
            }
        }
    }
}

I did not use the swagger editor.
I read other issues with arrays without "items" but that doesn't seem like an issue here. But I did notice some weird behavior though:

"destinations": { "type": "array", "items": { **"$ref": "#/definitions/Destination"** } },
I see a "definitions" added randomly to all array items. I am not sure what it is. My Entity has a OneToMany association so I have a List Object. For example, User class has a a List of Comment objects.

Any pointers?

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions