java - 使用 openapi4j 解析包含 jar 内引用的 Swagger

标签 java swagger openapi

我正在尝试使用 openapi4j 解析以下 swagger 文件:

{
  "openapi" : "3.0.0",
  "info" : {
    "title" : "My Service",
    "version" : "1.0.0"
  },
  "paths" : {
    "/endpoint" : { "$ref" :  "swagger2.json#/paths/get_endpoint" },
  }
}

您可以看到它有一个对同一文件夹中另一个文件的简单引用。

我使用以下内容解析 Swagger 文件:

URL url = Thread.currentThread().getContextClassLoader().getResource(filePath);
openAPI = new OpenApi3Parser().parse(url, false);

在我的本地 IDE 中,这效果很好。引用已加载,我可以毫无问题地验证针对它的请求。然而,当我打包项目时,它能够很好地加载初始的 swagger 文件,但没有任何 refs.txt 文件。我收到以下错误:

StackTrace: org.openapi4j.core.exception.ResolutionException: Failed to load document from 'swagger2.json'
    at org.openapi4j.core.model.reference.AbstractReferenceResolver.registerDocument(AbstractReferenceResolver.java:118)
    at org.openapi4j.core.model.reference.AbstractReferenceResolver.findReferences(AbstractReferenceResolver.java:92)
    at org.openapi4j.core.model.reference.AbstractReferenceResolver.resolve(AbstractReferenceResolver.java:53)
    at org.openapi4j.core.model.v3.OAI3Context.resolveReferences(OAI3Context.java:103)
    at org.openapi4j.core.model.v3.OAI3Context.<init>(OAI3Context.java:73)
    at org.openapi4j.core.model.v3.OAI3Context.<init>(OAI3Context.java:47)
    at org.openapi4j.parser.OpenApi3Parser.parse(OpenApi3Parser.java:34)
    at org.openapi4j.parser.OpenApi3Parser.parse(OpenApi3Parser.java:18)
    at org.openapi4j.parser.OpenApiParser.parse(OpenApiParser.java:53)

我不确定这是否可行。我假设我可能必须在运行时将项目资源复制到文件系统中的某处以便更轻松地访问。如果可能的话,我想避开这条路线。

最佳答案

事实证明这是 openapi4j 中的一个错误,它使用 URI 而不是 URL 来解析引用。此问题已在 0.9 中修复

关于java - 使用 openapi4j 解析包含 jar 内引用的 Swagger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61109016/

相关文章:

java - Swagger-Codegen 不使用供应商扩展 x-discriminator-value

java - 使用mockito测试DriverManager.getConnection

java - 计时器和线程问题

jaxb - 将 Swagger 与 JAX-RS 和 JAXB 集成需要帮助

java - 如何在 swaggaer4spring-web 中设置发送按钮的操作 url?

java - 如何在 Swagger API 文档中排除 lib

java - 为什么这个 Java Switch-Case 不起作用?

java - 如何在互联网连接上显示通知?

swagger - 如何使用 OpenAPI (Swagger) 描述多部分响应?

openapi - OpenAPI 3.0/3.1 文档中的 info.description 中是否允许使用 $ref ?