首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >同一类的不同行为取决于依赖项?

同一类的不同行为取决于依赖项?
EN

Stack Overflow用户
提问于 2016-02-19 18:39:08
回答 2查看 162关注 0票数 0

我搞不懂为什么要观察方法调用的不同输出,这取决于是否包含了额外的库。

在解析Swaggerv1.2Doc时,我观察到了不同的结果,不管有没有swagger-compat-spec-parser库。

注意,在下面的输出中,我运行Scala编程语言的REPL。

将Swagger文档解析为无null swagger-compat-spec-parser 库的库

代码语言:javascript
运行
复制
$cat build.sbt
 libraryDependencies += "io.swagger" % "swagger-parser" % "1.0.17"
$sbt console

scala> import io.swagger.parser.SwaggerParser
import io.swagger.parser.SwaggerParser

scala> "/Users/Kevin/Workspace/project/src/test/resources/api-docs-swagger-v1.2"
res0: String = /Users/Kevin/Workspace/project/src/test/resources/api-docs-swagger-v1.2

scala> new SwaggerParser().read(res0)
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
reading from /Users/Kevin/Workspace/project/src/test/resources/api-docs-swagger-v1.2
reading from /Users/Kevin/Workspace/project/src/test/resources/api-docs-swagger-v1.2
res1: io.swagger.models.Swagger = null

使用swagger-compat-spec-parser Swagger Doc解析为非空结果

代码语言:javascript
运行
复制
$cat build.sbt
 libraryDependencies += "io.swagger" % "swagger-parser" % "1.0.17"
 libraryDependencies += "io.swagger" % "swagger-compat-spec-parser" % "1.0.17"
$sbt console

scala> import io.swagger.parser.SwaggerParser
import io.swagger.parser.SwaggerParser

scala> "/Users/Kevin/Workspace/project/src/test/resources/api-docs-swagger-v1.2"
res0: String = /Users/Kevin/Workspace/project/src/test/resources/api-docs-swagger-v1.2

scala> new SwaggerParser().read(res0)
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
reading from /Users/Kevin/Workspace/project/src/test/resources/api-docs-swagger-v1.2
reading from /Users/Kevin/Workspace/project/src/test/resources/api-docs-swagger-v1.2
res1: io.swagger.models.Swagger = io.swagger.models.Swagger@5876ed9a

为什么相同类的read方法会因是否存在另一个依赖项而有所不同?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-20 09:30:56

这和Swagger有关。

行为是可以的,甚至可能没有文档化(至少在源代码中没有)。看看https://github.com/swagger-api/swagger-parser/blob/master/modules/swagger-parser/src/main/java/io/swagger/parser/SwaggerParser.java#L55

更准确地说,在第64行,Swagger读取位置,但只有当它是URL。

因此,您的示例将一直运行到使用扩展的第72行。扩展通过第60行的getExtensions()提供(第169号行的定义)。

如您所见,它们是通过ServiceLoader在运行时加载的,即当不提供任何解析时:)

希望这能澄清你的行为。但是,您可以测试您的第二个示例,将Swagger指向没有存在的文件,以查看它在哪里爆炸,您将得到:

代码语言:javascript
运行
复制
scala> "/Users/IMNotKevin/Thus/Api/Does/Not/Exist"
res0: String = /Users/IMNotKevin/Thus/Api/Does/Not/Exist

scala> new SwaggerParser().read(res0)
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
reading from /Users/IMNotKevin/Thus/Api/Does/Not/Exist
reading from /Users/IMNotKevin/Thus/Api/Does/Not/Exist
java.io.FileNotFoundException: /Users/IMNotKevin/Thus/Api/Does/Not/Exist (No such file or directory)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:195)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at com.fasterxml.jackson.core.JsonFactory.createParser(JsonFactory.java:708)
    at com.fasterxml.jackson.databind.ObjectMapper.readTree(ObjectMapper.java:1861)
   at io.swagger.parser.SwaggerCompatConverter.readResourceListing(SwaggerCompatConverter.java:139)
   at io.swagger.parser.SwaggerCompatConverter.read(SwaggerCompatConverter.java:74)
   at io.swagger.parser.SwaggerParser.read(SwaggerParser.java:73)
   at io.swagger.parser.SwaggerParser.read(SwaggerParser.java:52)  

享受:)

票数 1
EN

Stack Overflow用户

发布于 2016-02-21 06:21:46

@Teliakto是正确的。根据自述文件,如果要加载1.2规范,则必须加载swagger-compat-spec-parser。这是通过SPI完成的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35512559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档