question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Unable to load RELATIVE ref: ./parameters.yaml

See original GitHub issue

I’m starting with gradle plugin swagger2markup version 13.1.

I have this directory structure:

- models
      |_ main.yaml
      |_ components
            |_ parameters.yaml
            |_ paths.yaml
- build.gradle 

The main.yml references paths.yaml and paths.yaml references parameters.yaml. When I launch the task convertSwagger2markup --stacktrace, I have this error:

Caused by: java.lang.RuntimeException: Unable to load RELATIVE ref: ./parameters.yaml
        at io.swagger.parser.util.RefUtils.readExternalRef(RefUtils.java:140)
        at io.swagger.parser.ResolverCache.loadRef(ResolverCache.java:94)
        at io.swagger.parser.processors.ParameterProcessor.processParameters(ParameterProcessor.java:37)
        at io.swagger.parser.processors.OperationProcessor.processOperation(OperationProcessor.java:26)
        at io.swagger.parser.processors.PathsProcessor.processPaths(PathsProcessor.java:93)
        at io.swagger.parser.SwaggerResolver.resolve(SwaggerResolver.java:40)
        at io.swagger.parser.SwaggerParser.read(SwaggerParser.java:66)
        at io.swagger.parser.SwaggerParser.read(SwaggerParser.java:52)
        at io.github.swagger2markup.Swagger2MarkupConverter$Builder.readSwagger(Swagger2MarkupConverter.java:321)
        at io.github.swagger2markup.Swagger2MarkupConverter$Builder.<init>(Swagger2MarkupConverter.java:301)
        at io.github.swagger2markup.Swagger2MarkupConverter.from(Swagger2MarkupConverter.java:116)
        at io.github.swagger2markup.Swagger2MarkupConverter.from(Swagger2MarkupConverter.java:81)
        at io.github.swagger2markup.Swagger2MarkupConverter$from.call(Unknown Source)
        at io.github.swagger2markup.tasks.Swagger2MarkupTask.convertSwagger2markup(Swagger2MarkupTask.groovy:62)
        ... 114 more
Caused by: java.lang.RuntimeException: Could not find ./parameters.yaml on the classpath
        at io.swagger.parser.util.ClasspathHelper.loadFileFromClasspath(ClasspathHelper.java:31)
        at io.swagger.parser.util.RefUtils.readExternalRef(RefUtils.java:135)
        ... 127 more

I originally post a issue on Swagger2Markup/swagger2markup (256), they said me to post a issue here.

Issue Analytics

  • State:closed
  • Created 6 years ago
  • Comments:11 (6 by maintainers)

github_iconTop GitHub Comments

3reactions
cabraljecommented, Nov 6, 2017

Same issue. As a work around, I’m consolidating all referenced files to a single directory.

2reactions
jorgerodcommented, Apr 16, 2020

Hi @gracekarina

I use openapi-generator:4.3.0 maven plugin and forced swagger-parser:2.0.19.

I have checked that the relative paths in responses and responseBody work correctly #1343

Relative paths in parameters are not working (I don’t check if relative paths in examples, links or headers are working)

spec

I have this directory structure:

project
    |-- openapi-rest.yml
    |-- components
        |-- paths.yml
        |-- parameters.yml

.openapi-rest.yml

openapi: 3.0.0
info:
  version: 1.0.0
  title: Pruebas openAPI
  description: Pruebas openapi con referencias
servers:
  - url: http://localhost:8080
    description: Localhost
paths:
  /dummy-resource:
    $ref: 'components/paths.yml'

.paths.yml

get:
  operationId: get
  parameters:
    - name: myParam
      in: query
      description: Param
      required: true
      schema:
        $ref: 'parameters.yml#/components/schemas/DummyParam'
  responses:
    '200':
      description: My OK Response

.parameters.yml

components:
  schemas:
    DummyParam:
      type: integer
      format: int32
      minimum: 0
      maximum: 100

Openapi-generator fails to generate and output the following.

[INFO] --- openapi-generator-maven-plugin:4.3.0:generate (generate-rest-api) @ rest-api-first-ws-api ---
[WARNING] Exception while reading:
java.lang.RuntimeException: Unable to load RELATIVE ref: parameters.yml path: C:\dev_openfwt_3x\rest-api-first\rest-api-first-ws-api\target\tmp\openapi\rest
    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.processRefToExternalSchema (ExternalRefProcessor.java:60)
    at io.swagger.v3.parser.processors.SchemaProcessor.processReferenceSchema (SchemaProcessor.java:214)
    at io.swagger.v3.parser.processors.SchemaProcessor.processSchema (SchemaProcessor.java:37)
    at io.swagger.v3.parser.processors.ParameterProcessor.processParameters (ParameterProcessor.java:145)
    at io.swagger.v3.parser.processors.OperationProcessor.processOperation (OperationProcessor.java:39)
    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.readLocation (OpenAPIV3Parser.java:67)
    at io.swagger.parser.OpenAPIParser.readLocation (OpenAPIParser.java:16)
    at org.openapitools.codegen.config.CodegenConfigurator.toContext (CodegenConfigurator.java:455)
    at org.openapitools.codegen.config.CodegenConfigurator.toClientOptInput (CodegenConfigurator.java:501)
    at org.openapitools.codegen.plugin.CodeGenMojo.execute (CodeGenMojo.java:723)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:566)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
    at org.codehaus.classworlds.Launcher.main (Launcher.java:47)
Caused by: java.lang.RuntimeException: Could not find parameters.yml 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)
    at io.swagger.v3.parser.ResolverCache.loadRef (ResolverCache.java:119)
    at io.swagger.v3.parser.processors.ExternalRefProcessor.processRefToExternalSchema (ExternalRefProcessor.java:60)
    at io.swagger.v3.parser.processors.SchemaProcessor.processReferenceSchema (SchemaProcessor.java:214)
    at io.swagger.v3.parser.processors.SchemaProcessor.processSchema (SchemaProcessor.java:37)

Expected output:

/**
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (4.3.0).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */
package com.demo.service;

import io.swagger.annotations.*;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.multipart.MultipartFile;

import javax.validation.Valid;
import javax.validation.constraints.*;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@javax.annotation.Generated(value = "com.rest.server.codegen.SpringCodegen", date = "2020-04-16T11:27:26.907918500+02:00[Europe/Paris]")

@Validated
@Api(value = "Default", description = "the Default API")
public interface DefaultApi {

    default Optional<NativeWebRequest> getRequest() {
        return Optional.empty();
    }

    /**
     * GET /dummy-resource
     *
     * @param myParam Param (required)
     * @return My OK Response (status code 200)
     */
    @ApiOperation(value = "", nickname = "get", notes = "", tags={  })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "My OK Response") })
    @RequestMapping(value = "/dummy-resource",
        method = RequestMethod.GET)
    default ResponseEntity<Void> get(@NotNull @Min(0) @Max(100) @ApiParam(value = "Param", required = true) @Valid @RequestParam(value = "myParam", required = true) Integer myParam) throws Exception {
        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);

    }

}

Related issues/PRs #1292 #1343

Read more comments on GitHub >

github_iconTop Results From Across the Web

"Unable to load RELATIVE ref" for openapi-run.yaml in GCP ...
You are using an absolute filename, not a relative one. Try dropping the leading /workspace/ from the path in $ref .
Read more >
[BUG][JAVA] Regression "-Unable to load RELATIVE ref ...
[main] WARN o.o.codegen.utils.ModelUtils - Failed to get the schema name: ./openapi/model.yaml#/components/responses/FooResponse Exception ...
Read more >
The correct way to pull stuff from classpath in $ref
The Swagger YAML file in service attempts to pull a parameter which is defined in common but with ... failed: Unable to load...
Read more >
Relative $refs not being loaded when running as a jar?
yaml and has a $ref: getCustomer-schema.json in it. However, when this runs, it seems to be able to load the main spec file...
Read more >
swagger-api - Bountysource
Unable to load RELATIVE ref : ./parameters.yaml ... I'm starting with gradle plugin swagger2markup version 13.1. I have this directory structure: - ...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found