OpenAPITools / OpenAPITools/openapi-generator
[BUG] NPE encountered when validating valid YAML
Open
Nobody has claimed this yet.
Issue: Bug
- Dominant language
- Java
- Stars
- 26.8k
- Forks
- 7.7k
- PR merge metrics
- PR metrics pending
Description
Description
Validation fails because of a nullpointerexception thrown deep inside of the parsing code with no helpful output on what (if anything) is wrong with the API spec.
Bug output:
$ openapi-generator validate -i api.yaml
Validating spec (api.yaml)
[main] ERROR i.s.parser.SwaggerCompatConverter - failed to read resource listing
com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'components': was expecting ('true', 'false' or 'null')
at [Source: (String)"components:
schemas:
Status:
properties:
message:
type: string
status:
type: string
required:
- status
type: object
Word:
properties:
word:
type: string
required:
- word
type: object
WordList:
properties:
words:
items:
type: string
type: array
required:
- words
type: object
info:
title: Sample API
version: 0.0.1
op"[truncated 964 chars]; line: 1, column: 11]
at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1804)
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:673)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._reportInvalidToken(ReaderBasedJsonParser.java:2835)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._handleOddValue(ReaderBasedJsonParser.java:1889)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:747)
at com.fasterxml.jackson.databind.ObjectMapper._readTreeAndClose(ObjectMapper.java:4042)
at com.fasterxml.jackson.databind.ObjectMapper.readTree(ObjectMapper.java:2551)
at io.swagger.parser.SwaggerCompatConverter.readResourceListing(SwaggerCompatConverter.java:210)
at io.swagger.parser.SwaggerCompatConverter.read(SwaggerCompatConverter.java:123)
at io.swagger.parser.SwaggerCompatConverter.readWithInfo(SwaggerCompatConverter.java:94)
at io.swagger.parser.SwaggerParser.readWithInfo(SwaggerParser.java:42)
at io.swagger.v3.parser.converter.SwaggerConverter.readLocation(SwaggerConverter.java:96)
at io.swagger.parser.OpenAPIParser.readLocation(OpenAPIParser.java:16)
at org.openapitools.codegen.cmd.Validate.run(Validate.java:46)
at org.openapitools.codegen.OpenAPIGenerator.main(OpenAPIGenerator.java:60)
[main] ERROR i.s.parser.SwaggerCompatConverter - failed to read resource listing
com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'components': was expecting ('true', 'false' or 'null')
at [Source: (String)"components:
schemas:
Status:
properties:
message:
type: string
status:
type: string
required:
- status
type: object
Word:
properties:
word:
type: string
required:
- word
type: object
WordList:
properties:
words:
items:
type: string
type: array
required:
- words
type: object
info:
title: Sample API
version: 0.0.1
op"[truncated 964 chars]; line: 1, column: 11]
at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1804)
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:673)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._reportInvalidToken(ReaderBasedJsonParser.java:2835)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._handleOddValue(ReaderBasedJsonParser.java:1889)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:747)
at com.fasterxml.jackson.databind.ObjectMapper._readTreeAndClose(ObjectMapper.java:4042)
at com.fasterxml.jackson.databind.ObjectMapper.readTree(ObjectMapper.java:2551)
at io.swagger.parser.SwaggerCompatConverter.readResourceListing(SwaggerCompatConverter.java:210)
at io.swagger.parser.SwaggerCompatConverter.read(SwaggerCompatConverter.java:123)
at io.swagger.parser.SwaggerCompatConverter.readWithInfo(SwaggerCompatConverter.java:94)
at io.swagger.parser.SwaggerParser.readWithInfo(SwaggerParser.java:42)
at io.swagger.v3.parser.converter.SwaggerConverter.readLocation(SwaggerConverter.java:96)
at io.swagger.parser.OpenAPIParser.readLocation(OpenAPIParser.java:16)
at org.openapitools.codegen.cmd.Validate.run(Validate.java:46)
at org.openapitools.codegen.OpenAPIGenerator.main(OpenAPIGenerator.java:60)
Exception in thread "main" java.lang.NullPointerException
at java.util.HashSet.<init>(HashSet.java:119)
at org.openapitools.codegen.cmd.Validate.run(Validate.java:48)
at org.openapitools.codegen.OpenAPIGenerator.main(OpenAPIGenerator.java:60)
openapi-generator version
4.1.3
OpenAPI declaration file content or url
components:
schemas:
Status:
properties:
message:
type: string
status:
type: string
required:
- status
type: object
Word:
properties:
word:
type: string
required:
- word
type: object
WordList:
properties:
words:
items:
type: string
type: array
required:
- words
type: object
info:
title: Sample API
version: 0.0.1
openapi: 3.0.2
paths:
/word/{word}:
get:
description: Get a word
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Word'
/word:
post:
description: Post a new word
requestBody:
content:
schema: WordSchema
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Word'
get:
description: Get some words
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/WordList'
/ping:
get:
description: Ping the API
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Status'
/:
get:
description: Return discovery document
Command line used for generation
openapi-generator validate -i api.yaml
$ openapi-generator version
4.1.3
Steps to reproduce
- Just run the validate command on the provided API spec
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the issue with the supplied API declaration and openapi-generator validate -i api.yaml on version 4.1.3. Trace the reported path through org.openapitools.codegen.cmd.Validate.run and io.swagger.parser.SwaggerCompatConverter; done means validation reports a useful parsing or specification error instead of throwing a NullPointerException.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- api, cli
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100