swagger-parser: Parser does not resolve $ref pointing to relative locations on classpath
When parsing a schema file loaded from the classpath (either on file or in jar), the parser does not correctly resolve $ref elements pointing to other json or yaml files in relative path locations.
For example,
src/main/resources/
|- schema/
|- schema.yaml
|- import/
|- data_structures.yaml
schema.yaml
openapi: 3.0.2
info:
title: Schema in sub-path
version: 1-0
description:
paths:
/test:
post:
operationId: doStuff
requestBody:
content:
application/json:
schema:
$ref: 'import/data-structures.yaml#/Foo
responses:
'200':
description: Successful result
content:
application/json:
schema:
$ref: 'import/data-structures.yaml#/Foo
data-structures.yaml
Foo:
type: object
(etc)
The parser should be able to resolve this relative $ref path when loading from the classpath, however it gives the following error message:
Unable to load RELATIVE ref: ./import/data-structures.yaml path: C:\schema
In debugging I observed two problems occurring:
- PathUtils fails to correctly identify the parent directory of schema files looked up on the classpath
- schema files located in jar files do not resolve to a parent directory, so ResolverCache needs an alternative way to read relative $ref elements from the classpath.
Attached is a test case demonstrating these issues ( as a zipped up maven build), a unified diff to fix the issues, and a test case fix
About this issue
- Original URL
- State: closed
- Created 5 years ago
- Comments: 16 (9 by maintainers)
Thanks to all involved in this one - our issue has been resolved with 2.0.14.