Skip to content

swagger-codegen: SwaggerCompatConverter throws NPE due to TRACE HTTP // no handling of duplicate nicknames #612

@jfiala

Description

@jfiala

With this api-doc (generated using the Basic Error Controller of the Swagger Spring-MVC project at https://github.com/springfox/springfox with com.mangofactory:swagger-springmvc-1.0.2)
SwaggerCompatConverter (Swagger-Codegen 2.1.2-M1) will throw an NPE:

com.wordnik.swagger.codegen.Codegen -i http://localhost:8080/api-docs -l java

java.lang.NullPointerException
at io.swagger.parser.SwaggerCompatConverter.convert(SwaggerCompatConverter.java:455)
at io.swagger.parser.SwaggerCompatConverter.read(SwaggerCompatConverter.java:111)
at io.swagger.parser.SwaggerParser.read(SwaggerParser.java:34)
at com.wordnik.swagger.codegen.Codegen.main(Codegen.java:93)

Full API-doc:

{
    "apiVersion": "1.0",
    "apis": [
        {
            "description": "error",
            "operations": [
                {
                    "method": "GET",
                    "summary": "error",
                    "notes": "error",
                    "nickname": "error",
                    "produces": ["*/*"],
                    "consumes": ["application/json"],
                    "parameters": [],
                    "responseMessages": [
                        {
                            "code": 200,
                            "message": null,
                            "responseModel": "Map«string,object»"
                        }
                    ],
                    "deprecated": "false",
                    "type": "Map«string,object»"
                }, {
                    "method": "HEAD",
                    "summary": "error",
                    "notes": "error",
                    "nickname": "error",
                    "produces": ["*/*"],
                    "consumes": ["application/json"],
                    "parameters": [],
                    "responseMessages": [
                        {
                            "code": 200,
                            "message": null,
                            "responseModel": "Map«string,object»"
                        }
                    ],
                    "deprecated": "false",
                    "type": "Map«string,object»"
                }, {
                    "method": "POST",
                    "summary": "error",
                    "notes": "error",
                    "nickname": "error",
                    "produces": ["*/*"],
                    "consumes": ["application/json"],
                    "parameters": [],
                    "responseMessages": [
                        {
                            "code": 200,
                            "message": null,
                            "responseModel": "Map«string,object»"
                        }
                    ],
                    "deprecated": "false",
                    "type": "Map«string,object»"
                }, {
                    "method": "PUT",
                    "summary": "error",
                    "notes": "error",
                    "nickname": "error",
                    "produces": ["*/*"],
                    "consumes": ["application/json"],
                    "parameters": [],
                    "responseMessages": [
                        {
                            "code": 200,
                            "message": null,
                            "responseModel": "Map«string,object»"
                        }
                    ],
                    "deprecated": "false",
                    "type": "Map«string,object»"
                }, {
                    "method": "PATCH",
                    "summary": "error",
                    "notes": "error",
                    "nickname": "error",
                    "produces": ["*/*"],
                    "consumes": ["application/json"],
                    "parameters": [],
                    "responseMessages": [
                        {
                            "code": 200,
                            "message": null,
                            "responseModel": "Map«string,object»"
                        }
                    ],
                    "deprecated": "false",
                    "type": "Map«string,object»"
                }, {
                    "method": "DELETE",
                    "summary": "error",
                    "notes": "error",
                    "nickname": "error",
                    "produces": ["*/*"],
                    "consumes": ["application/json"],
                    "parameters": [],
                    "responseMessages": [
                        {
                            "code": 200,
                            "message": null,
                            "responseModel": "Map«string,object»"
                        }
                    ],
                    "deprecated": "false",
                    "type": "Map«string,object»"
                }, {
                    "method": "OPTIONS",
                    "summary": "error",
                    "notes": "error",
                    "nickname": "error",
                    "produces": ["*/*"],
                    "consumes": ["application/json"],
                    "parameters": [],
                    "responseMessages": [
                        {
                            "code": 200,
                            "message": null,
                            "responseModel": "Map«string,object»"
                        }
                    ],
                    "deprecated": "false",
                    "type": "Map«string,object»"
                }, {
                    "method": "TRACE",
                    "summary": "error",
                    "notes": "error",
                    "nickname": "error",
                    "produces": ["*/*"],
                    "consumes": ["application/json"],
                    "parameters": [],
                    "responseMessages": [
                        {
                            "code": 200,
                            "message": null,
                            "responseModel": "Map«string,object»"
                        }
                    ],
                    "deprecated": "false",
                    "type": "Map«string,object»"
                }
            ],
            "path": "/error"
        }, {
            "description": "errorHtml",
            "operations": [
                {
                    "method": "GET",
                    "summary": "errorHtml",
                    "notes": "errorHtml",
                    "nickname": "errorHtml",
                    "produces": ["text/html"],
                    "consumes": ["application/json"],
                    "parameters": [],
                    "responseMessages": [
                        {
                            "code": 200,
                            "message": null,
                            "responseModel": "ModelAndView"
                        }
                    ],
                    "deprecated": "false",
                    "type": "ModelAndView"
                }, {
                    "method": "HEAD",
                    "summary": "errorHtml",
                    "notes": "errorHtml",
                    "nickname": "errorHtml",
                    "produces": ["text/html"],
                    "consumes": ["application/json"],
                    "parameters": [],
                    "responseMessages": [
                        {
                            "code": 200,
                            "message": null,
                            "responseModel": "ModelAndView"
                        }
                    ],
                    "deprecated": "false",
                    "type": "ModelAndView"
                }, {
                    "method": "POST",
                    "summary": "errorHtml",
                    "notes": "errorHtml",
                    "nickname": "errorHtml",
                    "produces": ["text/html"],
                    "consumes": ["application/json"],
                    "parameters": [],
                    "responseMessages": [
                        {
                            "code": 200,
                            "message": null,
                            "responseModel": "ModelAndView"
                        }
                    ],
                    "deprecated": "false",
                    "type": "ModelAndView"
                }, {
                    "method": "PUT",
                    "summary": "errorHtml",
                    "notes": "errorHtml",
                    "nickname": "errorHtml",
                    "produces": ["text/html"],
                    "consumes": ["application/json"],
                    "parameters": [],
                    "responseMessages": [
                        {
                            "code": 200,
                            "message": null,
                            "responseModel": "ModelAndView"
                        }
                    ],
                    "deprecated": "false",
                    "type": "ModelAndView"
                }, {
                    "method": "PATCH",
                    "summary": "errorHtml",
                    "notes": "errorHtml",
                    "nickname": "errorHtml",
                    "produces": ["text/html"],
                    "consumes": ["application/json"],
                    "parameters": [],
                    "responseMessages": [
                        {
                            "code": 200,
                            "message": null,
                            "responseModel": "ModelAndView"
                        }
                    ],
                    "deprecated": "false",
                    "type": "ModelAndView"
                }, {
                    "method": "DELETE",
                    "summary": "errorHtml",
                    "notes": "errorHtml",
                    "nickname": "errorHtml",
                    "produces": ["text/html"],
                    "consumes": ["application/json"],
                    "parameters": [],
                    "responseMessages": [
                        {
                            "code": 200,
                            "message": null,
                            "responseModel": "ModelAndView"
                        }
                    ],
                    "deprecated": "false",
                    "type": "ModelAndView"
                }, {
                    "method": "OPTIONS",
                    "summary": "errorHtml",
                    "notes": "errorHtml",
                    "nickname": "errorHtml",
                    "produces": ["text/html"],
                    "consumes": ["application/json"],
                    "parameters": [],
                    "responseMessages": [
                        {
                            "code": 200,
                            "message": null,
                            "responseModel": "ModelAndView"
                        }
                    ],
                    "deprecated": "false",
                    "type": "ModelAndView"
                }, {
                    "method": "TRACE",
                    "summary": "errorHtml",
                    "notes": "errorHtml",
                    "nickname": "errorHtml",
                    "produces": ["text/html"],
                    "consumes": ["application/json"],
                    "parameters": [],
                    "responseMessages": [
                        {
                            "code": 200,
                            "message": null,
                            "responseModel": "ModelAndView"
                        }
                    ],
                    "deprecated": "false",
                    "type": "ModelAndView"
                }
            ],
            "path": "/error"
        }
    ],
    "basePath": "/",
    "consumes": ["application/json"],
    "models": {
        "View": {
            "description": "",
            "id": "View",
            "properties": {
                "contentType": {
                    "required": false,
                    "type": "string"
                }
            }
        },
        "ModelAndView": {
            "description": "",
            "id": "ModelAndView",
            "properties": {
                "view": {
                    "required": false,
                    "type": "View"
                },
                "model": {
                    "required": false,
                    "type": "object"
                },
                "empty": {
                    "required": false,
                    "type": "boolean"
                },
                "modelMap": {
                    "required": false,
                    "type": "ModelMap"
                },
                "viewName": {
                    "required": false,
                    "type": "string"
                },
                "reference": {
                    "required": false,
                    "type": "boolean"
                }
            }
        },
        "ModelMap": {
            "description": "",
            "id": "ModelMap",
            "properties": {
                "empty": {
                    "required": false,
                    "type": "boolean"
                }
            }
        }
    },
    "produces": ["*/*", "text/html"],
    "resourcePath": "/error",
    "swaggerVersion": "1.2"
}

I tried to replace SwaggerCompatConverter, but right now it doesn't seem to be intended to replace the SwaggerCompatConverter easily, as it is parsed via "SwaggerParserExtension" and there is no reference to the class SwaggerCompatConverter in the whole swagger-codegen-project-2.1.2-M1 (to allow it to be edited):

SwaggerParser:

for(SwaggerParserExtension extension : parserExtensions) {
      try{
        output = extension.read(location, auths);
        if(output != null) {
          return output;
        }
      }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions