OpenAPITools / OpenAPITools/openapi-generator

[BUG] NPE encountered when validating valid YAML

Open
#4,243 1 comment 0 reactions 0 assignees View on GitHub

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
  1. Just run the validate command on the provided API spec

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.