eclipse-vertx / vertx-openapi

OpenAPI repository
Other
10 stars 7 forks source link

Relative references in $ref are not supported #74

Open tnmtechnologies opened 4 months ago

tnmtechnologies commented 4 months ago

Version

4.5.8

Context

Relative references in $ref are not supported (see OpenAPI spec https://spec.openapis.org/oas/latest.html#relative-references-in-uris) while it worked well with previous OpenAPI library.

The following exception is thrown:

java.lang.UnsupportedOperationException: Can't resolve 'the relative reference to a OpenAPI file ', only internal refs are supported. at io.vertx.json.schema.impl.JsonRef.resolveUri(JsonRef.java:344) at io.vertx.json.schema.impl.JsonRef.resolve(JsonRef.java:211) at io.vertx.json.schema.impl.SchemaRepositoryImpl.resolve(SchemaRepositoryImpl.java:243) at io.vertx.openapi.contract.OpenAPIVersion.lambda$resolve$3(OpenAPIVersion.java:86) at io.vertx.core.impl.ContextImpl.lambda$executeBlocking$1(ContextImpl.java:191) at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:279) at io.vertx.core.impl.ContextImpl.lambda$internalExecuteBlocking$2(ContextImpl.java:210) at io.vertx.core.impl.TaskQueue.run(TaskQueue.java:76) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.base/java.lang.Thread.run(Thread.java:833)

We work with more than one hundred of OpenAPI files. Most of them use relative references to components in other OpenAPI files. They are provided by a third party.

It would be nice to support relative references from a configuration option. It would avoid to update OpenAPI files in order to replace relative references by fake absolute ones and to add them by hand as additionalContractFiles in OpenAPIContract.from method.

Do you have a reproducer?

No

Steps to reproduce

Extra

pk-work commented 1 month ago

Due to security reasons we decided that files must be provided upfront. Maybe we could add a method which parses the OpenAPI files, follow the relative links and create the required additionalContractFiles Map. But I don't think that is something I will develop in the future.

If you want to provide such a feature, I would support it.