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

Field name "entries" in a schema causes swagger-ui javascript error and fails to load #6016

Closed
mke1ms opened this issue May 17, 2020 · 9 comments · Fixed by #6025
Closed

Comments

@mke1ms
Copy link

mke1ms commented May 17, 2020

Problem

The openapi definition below has a schema with a field name called "entries". This causes the ui to throw a javascript error "e.entries is not a function" (see the screenshot below).

This behavior only started Friday May 15th 2020 at around 15:00 CET. Before that swagger-ui had no problems loading a schema containing a field called entries, so I am assuming something changed in the bundle I use from the url above.

Example Swagger/OpenAPI definition:

{
  "openapi": "3.0.2",
  "info": {
    "title": "FastAPI",
    "version": "0.1.0"
  },
  "paths": {
    "/test/": {
      "get": {
        "summary": "Test",
        "operationId": "test_test__get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Testmodel"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Testmodel": {
        "title": "Testmodel",
        "required": [
          "name",
          "entries"
        ],
        "type": "object",
        "properties": {
          "name": {
            "title": "Name",
            "type": "string"
          },
          "entries": {
            "title": "Entries",
            "type": "integer"
          }
        }
      }
    }
  }
}

Screenshot

image

To reproduce...

Try to load swagger ui using the openapi.json above

@mke1ms mke1ms changed the title Field name "entries" in a model causes swagger-ui javascript erro and fails to load Field name "entries" in a schema causes swagger-ui javascript erro and fails to load May 17, 2020
@mke1ms mke1ms changed the title Field name "entries" in a schema causes swagger-ui javascript erro and fails to load Field name "entries" in a schema causes swagger-ui javascript error and fails to load May 17, 2020
@provegard
Copy link

Specifying version 3.25.2 (I'm using unpkg, I assume jsdelivr.net supports that too) fixes the problem.

@jmmolina796
Copy link

jmmolina796 commented May 18, 2020

Actually I have the same error:

When I type the field name entries, I received a message saying: "Unable to render this definition".

paths:
  /pet:
    post:
      summary: "Add a new pet to the store"
      description: ""
      parameters:
      - in: "body"
        name: "body"
        schema:
          $ref: "#/definitions/Pet"
      responses:
        "405":
          description: "Invalid input"
definitions:
  Pet:
    type: "object"
    properties:
      id:
        type: "integer"
      entries:
        type: "array"
        items:
          type: "string"

Screen Shot 2020-05-18 at 17 14 21

I need to write entries as a field since my API requires this name.

If I change entries to entry, it works as expected.

paths:
  /pet:
    post:
      summary: "Add a new pet to the store"
      description: ""
      parameters:
      - in: "body"
        name: "body"
        schema:
          $ref: "#/definitions/Pet"
      responses:
        "405":
          description: "Invalid input"
definitions:
  Pet:
    type: "object"
    properties:
      id:
        type: "integer"
      entry:
        type: "array"
        items:
          type: "string"

Can someone help me with this problem, why it fails when I use entries as a field name?

@vivvooren
Copy link

I have the same problem with Version 3.23.3

@stiliyan
Copy link

stiliyan commented May 19, 2020

We found the issue is likely related to this change, where swagger fragments with an entries field are interpreted as a FormData object and swagger-ui attempts to invoke entries().

Exiting early when entries is not a function should resolve this.

@jlsjonas
Copy link

Looks like this is caused by #5999

@tim-lai
Copy link
Contributor

tim-lai commented May 20, 2020

@mke1ms @jlsjonas @stiliyan @jmmolina796 Thanks for reporting with details and suggestions! A fix is incoming and will be included in the next release.

@RSkorina
Copy link

I have a question about this change. The change has been merged but the error still occurs when using petstore. Is there another repository that needs to adopt swagger before using 'entries' as a parameter works when rendering?

@tim-lai
Copy link
Contributor

tim-lai commented May 20, 2020

@RSkorina A new release of SwaggerUI will make this change visible on petstore.swagger.io

@katsisaac50
Copy link

Your API definition is missing the OpenAPI/Swagger version number, in this case "swagger": "2.0" . Add it at the beginning, like so:

{
"swagger": "2.0",
"title" : "Music API Documentation",
...

this worked for me, details on https://copyprogramming.com/howto/swagger-unable-to-render-this-definition-the-provided-definition-does-not-specify-a-valid-version-field?utm_content=cmp-true

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

Successfully merging a pull request may close this issue.

10 participants