我正在尝试使用 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/