Closed
Description
Originally from swagger-codegen swagger-api/swagger-codegen#3614
If you have a directory structure like
swagger.yaml
-folder1
-file1.yaml
-folder2
-file2.yaml
-folder3
-file3.yaml
then from file1.yaml it is unable to resolve references to file3.yaml or file2.yaml.
For the case in which file1 references file2, the exception thrown is:
Exception in thread "main" java.lang.RuntimeException: Unable to load RELATIVE ref: ../folder2/file2.yaml
at io.swagger.parser.util.RefUtils.readExternalRef(RefUtils.java:140)
at io.swagger.parser.ResolverCache.loadRef(ResolverCache.java:96)
at io.swagger.parser.processors.ExternalRefProcessor.processRefToExternalDefinition(ExternalRefProcessor.java:30)
at io.swagger.parser.processors.ExternalRefProcessor.processRefToExternalDefinition(ExternalRefProcessor.java:69)
at io.swagger.parser.processors.PropertyProcessor.processRefProperty(PropertyProcessor.java:33)
at io.swagger.parser.processors.PropertyProcessor.processProperty(PropertyProcessor.java:21)
at io.swagger.parser.processors.PropertyProcessor.processObjectProperty(PropertyProcessor.java:59)
at io.swagger.parser.processors.PropertyProcessor.processProperty(PropertyProcessor.java:27)
at io.swagger.parser.processors.ResponseProcessor.processResponse(ResponseProcessor.java:21)
at io.swagger.parser.processors.OperationProcessor.processOperation(OperationProcessor.java:45)
at io.swagger.parser.processors.PathsProcessor.processPaths(PathsProcessor.java:89)
at io.swagger.parser.SwaggerResolver.resolve(SwaggerResolver.java:40)
at io.swagger.parser.SwaggerParser.read(SwaggerParser.java:66)
at io.swagger.codegen.config.CodegenConfigurator.toClientOptInput(CodegenConfigurator.java:390)
at io.swagger.codegen.cmd.Generate.run(Generate.java:221)
at io.swagger.codegen.SwaggerCodegen.main(SwaggerCodegen.java:36)
Caused by: java.lang.RuntimeException: Could not find ../folder2/file2.yaml on the classpath
at io.swagger.parser.util.ClasspathHelper.loadFileFromClasspath(ClasspathHelper.java:31)
at io.swagger.parser.util.RefUtils.readExternalRef(RefUtils.java:135)
... 15 more
I created a suite of tests that I believe illustrate the problem, and attached it swagger-relative-file-references.zip.
The test cases that compare "./file1.yaml" vs "file.yaml" can likely be ignored, I created them for my own education to verify which formats of a relative reference were acceptable.
Metadata
Metadata
Assignees
Labels
No labels