swagger-api / swagger-api/swagger-codegen

Unable to load RELATIVE ref: ../../models/BadRequest.yaml path: /

Open
#10,542 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Mustache
Stars
17.8k
Forks
6k
PR merge metrics
No merged PRs in 30d

Description

Description

This works:

  responses:
    200:
      description: successful operation
      content:
        application/json:
          schema:
            $ref: '../../models/GetSessionListResponse.yaml'

This also work:

  responses:
    400:
      $ref: './openapi/models/BadRequest.yaml'

But this don't work:

  responses:
    400:
      $ref: '../../models/BadRequest.yaml'
19:09:07.732 [Thread-0] WARN  io.swagger.v3.parser.OpenAPIV3Parser - Exception while resolving:
java.lang.RuntimeException: Unable to load RELATIVE ref: ../../models/BadRequest.yaml path: /
        at io.swagger.v3.parser.util.RefUtils.readExternalRef(RefUtils.java:239)
        at io.swagger.v3.parser.ResolverCache.loadRef(ResolverCache.java:119)
        at io.swagger.v3.parser.processors.ExternalRefProcessor.processRefToExternalResponse(ExternalRefProcessor.java:344)
        at io.swagger.v3.parser.processors.ResponseProcessor.processReferenceResponse(ResponseProcessor.java:84)
        at io.swagger.v3.parser.processors.ResponseProcessor.processResponse(ResponseProcessor.java:41)
        at io.swagger.v3.parser.processors.OperationProcessor.processOperation(OperationProcessor.java:56)
        at io.swagger.v3.parser.processors.PathsProcessor.processPaths(PathsProcessor.java:84)
        at io.swagger.v3.parser.OpenAPIResolver.resolve(OpenAPIResolver.java:49)
        at io.swagger.v3.parser.OpenAPIV3Parser.resolve(OpenAPIV3Parser.java:172)
        at io.swagger.v3.parser.OpenAPIV3Parser.readContents(OpenAPIV3Parser.java:153)
        at io.swagger.v3.parser.OpenAPIV3Parser.readLocation(OpenAPIV3Parser.java:89)
        at io.swagger.parser.OpenAPIParser.readLocation(OpenAPIParser.java:16)
        at io.swagger.codegen.v3.config.CodegenConfigurator.toClientOptInput(CodegenConfigurator.java:517)
        at io.swagger.codegen.v3.cli.cmd.Generate.run(Generate.java:376)
        at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: java.lang.RuntimeException: Could not find ../../models/BadRequest.yaml on the classpath
        at io.swagger.v3.parser.util.ClasspathHelper.loadFileFromClasspath(ClasspathHelper.java:31)
        at io.swagger.v3.parser.util.RefUtils.readExternalRef(RefUtils.java:233)
        ... 14 common frames omitted
19:09:07.737 [Thread-0] WARN  io.swagger.v3.parser.OpenAPIV3Parser - Exception while resolving:
java.lang.RuntimeException: Unable to load RELATIVE ref: ../../models/BadRequest.yaml path: /
        at io.swagger.v3.parser.util.RefUtils.readExternalRef(RefUtils.java:239)
        at io.swagger.v3.parser.ResolverCache.loadRef(ResolverCache.java:119)
        at io.swagger.v3.parser.processors.ExternalRefProcessor.processRefToExternalResponse(ExternalRefProcessor.java:344)
        at io.swagger.v3.parser.processors.ResponseProcessor.processReferenceResponse(ResponseProcessor.java:84)
        at io.swagger.v3.parser.processors.ResponseProcessor.processResponse(ResponseProcessor.java:41)
        at io.swagger.v3.parser.processors.OperationProcessor.processOperation(OperationProcessor.java:56)
        at io.swagger.v3.parser.processors.PathsProcessor.processPaths(PathsProcessor.java:84)
        at io.swagger.v3.parser.OpenAPIResolver.resolve(OpenAPIResolver.java:49)
        at io.swagger.v3.parser.OpenAPIV3Parser.resolve(OpenAPIV3Parser.java:172)
        at io.swagger.v3.parser.OpenAPIV3Parser.readContents(OpenAPIV3Parser.java:153)
        at io.swagger.v3.parser.OpenAPIV3Parser.readLocation(OpenAPIV3Parser.java:89)
        at io.swagger.parser.OpenAPIParser.readLocation(OpenAPIParser.java:16)
        at io.swagger.codegen.v3.config.CodegenConfigurator.toClientOptInput(CodegenConfigurator.java:526)
        at io.swagger.codegen.v3.cli.cmd.Generate.run(Generate.java:376)
        at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: java.lang.RuntimeException: Could not find ../../models/BadRequest.yaml on the classpath
        at io.swagger.v3.parser.util.ClasspathHelper.loadFileFromClasspath(ClasspathHelper.java:31)
        at io.swagger.v3.parser.util.RefUtils.readExternalRef(RefUtils.java:233)
        ... 14 common frames omitted
Exception in thread "Thread-0" java.lang.NullPointerException: Cannot invoke "io.swagger.v3.oas.models.Components.getSchemas()" because the return value of "io.swagger.v3.oas.models.OpenAPI.getComponents()" is null
        at io.swagger.codegen.v3.DefaultGenerator.generateModels(DefaultGenerator.java:334)
        at io.swagger.codegen.v3.DefaultGenerator.generate(DefaultGenerator.java:779)
        at io.swagger.codegen.v3.cli.cmd.Generate.run(Generate.java:378)
        at java.base/java.lang.Thread.run(Thread.java:832)
Swagger-codegen version

swagger-codegen-cli-3.0.22.jar

Swagger declaration file content or url
openapi: 3.0.1

paths:
  /system/getSessionList:
    $ref: './openapi/paths/system/getSessionList.yaml'

paths/system/getSessionList.yaml:

get:
  tags:
  - system
  summary: Get session list
  description: Multiple values
  operationId: getSessionList
  responses:
    200:
      description: successful operation
      content:
        application/json:
          schema:
            $ref: '../../models/GetSessionListResponse.yaml'
    400:
      $ref: '../../models/BadRequest.yaml'
Command line used for generation
docker run --rm -v ${PWD}:/local -w /local openjdk java -jar swagger-codegen-cli.jar generate --input-spec /local/openapi.yaml --lang openapi-yaml --output /local/out/ -c /local/openapi-codegen-php.json
Steps to reproduce
Related issues/PRs
Suggest a fix/enhancement

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 with io.swagger.v3.parser.util.RefUtils.readExternalRef and the ClasspathHelper.loadFileFromClasspath failure shown in the stack trace, then trace how ResolverCache.loadRef handles the nested path. Reproduce with the supplied Docker command and YAML files. Done means the relative response reference resolves without warnings and generation does not end with the reported NullPointerException.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
api, tooling
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.