首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenAPI规范在早期版本(openapi-generator 3.x)中有效,但在较新版本中验证失败

OpenAPI规范在早期版本(openapi-generator 3.x)中有效,但在较新版本中验证失败
EN

Stack Overflow用户
提问于 2021-02-10 02:36:25
回答 1查看 759关注 0票数 1

我正在尝试为其API被描述为OpenAPI文件(https://developer.loadsmart.com/api/openapi.yaml)的服务生成服务器存根,我正试图使用openapi生成器(https://github.com/OpenAPITools/openapi-generator)来实现这一点。

检出以前版本的存储库(3.3.4)时,我可以这样验证api文件:

代码语言:javascript
复制
$ java -jar openapi-generator-cli-3_3_4.jar validate -i api.yaml
Validating spec (api.yaml)
No validation issues detected.

当使用4.3.1版本的存储库(我相信是最新的4.x分支版本)时,API文件不再验证:

代码语言:javascript
复制
$ java -jar openapi-generator-cli-4_3_1.jar validate -i api.yaml
Validating spec (api.yaml)
[main] ERROR i.s.parser.SwaggerCompatConverter - failed to read resource listing
com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'openapi': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false')
 at [Source: (StringReader); line: 1, column: 8]
    at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1840)
    at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:722)
    at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._reportInvalidToken(ReaderBasedJsonParser.java:2868)
    at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._handleOddValue(ReaderBasedJsonParser.java:1914)
    at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:773)
    at com.fasterxml.jackson.databind.ObjectMapper._readTreeAndClose(ObjectMapper.java:4231)
    at com.fasterxml.jackson.databind.ObjectMapper.readTree(ObjectMapper.java:2711)
    at io.swagger.parser.SwaggerCompatConverter.readResourceListing(SwaggerCompatConverter.java:210)
    at io.swagger.parser.SwaggerCompatConverter.read(SwaggerCompatConverter.java:123)
    at io.swagger.parser.SwaggerCompatConverter.readWithInfo(SwaggerCompatConverter.java:94)
    at io.swagger.parser.SwaggerParser.readWithInfo(SwaggerParser.java:42)
    at io.swagger.v3.parser.converter.SwaggerConverter.readLocation(SwaggerConverter.java:89)
    at io.swagger.parser.OpenAPIParser.readLocation(OpenAPIParser.java:16)
    at org.openapitools.codegen.cmd.Validate.execute(Validate.java:52)
    at org.openapitools.codegen.cmd.OpenApiGeneratorCommand.run(OpenApiGeneratorCommand.java:32)
    at org.openapitools.codegen.OpenAPIGenerator.main(OpenAPIGenerator.java:61)
[main] ERROR i.s.parser.SwaggerCompatConverter - failed to read resource listing
com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'openapi': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false')
 at [Source: (StringReader); line: 1, column: 8]
    at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1840)
    at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:722)
    at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._reportInvalidToken(ReaderBasedJsonParser.java:2868)
    at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._handleOddValue(ReaderBasedJsonParser.java:1914)
    at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:773)
    at com.fasterxml.jackson.databind.ObjectMapper._readTreeAndClose(ObjectMapper.java:4231)
    at com.fasterxml.jackson.databind.ObjectMapper.readTree(ObjectMapper.java:2711)
    at io.swagger.parser.SwaggerCompatConverter.readResourceListing(SwaggerCompatConverter.java:210)
    at io.swagger.parser.SwaggerCompatConverter.read(SwaggerCompatConverter.java:123)
    at io.swagger.parser.SwaggerCompatConverter.readWithInfo(SwaggerCompatConverter.java:94)
    at io.swagger.parser.SwaggerParser.readWithInfo(SwaggerParser.java:42)
    at io.swagger.v3.parser.converter.SwaggerConverter.readLocation(SwaggerConverter.java:89)
    at io.swagger.parser.OpenAPIParser.readLocation(OpenAPIParser.java:16)
    at org.openapitools.codegen.cmd.Validate.execute(Validate.java:52)
    at org.openapitools.codegen.cmd.OpenApiGeneratorCommand.run(OpenApiGeneratorCommand.java:32)
    at org.openapitools.codegen.OpenAPIGenerator.main(OpenAPIGenerator.java:61)
Exception in thread "main" java.lang.NullPointerException
    at java.util.HashSet.<init>(HashSet.java:119)
    at org.openapitools.codegen.cmd.Validate.execute(Validate.java:54)
    at org.openapitools.codegen.cmd.OpenApiGeneratorCommand.run(OpenApiGeneratorCommand.java:32)
    at org.openapitools.codegen.OpenAPIGenerator.main(OpenAPIGenerator.java:61)

最后,当使用5.0版本(5.0.0或5.0.1)时,API文件似乎有额外的验证问题:

代码语言:javascript
复制
java -jar openapi-generator-cli-5_0_0.jar validate -i api.yaml
Validating spec (api.yaml)
Errors:
    - attribute
      paths.'/api/v2/load-offers/offers/{offer_id}/related'(get).responses.200.content.'application/json'.schema.items
      is missing
    - attribute
      paths.'/api/v2/matches/{match_id}/reject'(post).responses.200.content.'application/json'.schema.items
      is missing
    - attribute
      paths.'/api/v2/matches/{match_id}/accept'(post).responses.200.content.'application/json'.schema.items
      is missing
    - attribute
      paths.'/api/v2/load-offers/loads/'(get).responses.200.content.'application/json'.schema.items
      is missing
    - attribute
      paths.'/api/v2/matches/'(get).responses.200.content.'application/json'.schema.items is
      missing
    - attribute
      paths.'/api/v2/load-offers/loads/{load_id}'(get).responses.200.content.'application/json'.schema.items
      is missing
    - attribute
      paths.'/api/v2/load-offers/loads/{load_id}/related-offers'(get).responses.200.content.'application/json'.schema.items
      is missing
    - attribute paths.'/api/v2/carrier/{driver_id}'. Declared path parameter driver_id needs to
      be defined as a path parameter in path or operation level
    - attribute paths.'/api/v2/shippers/accounts/{account_id}'. Declared path parameter
      account_id needs to be defined as a path parameter in path or operation level
    - attribute
      paths.'/api/v2/shipments/{shipment_id}/appointment_suggestions?start_date={start_date}'.
      Declared path parameter shipment_id needs to be defined as a path parameter in path or
      operation level
    - attribute paths.'/api/v2/load-offers/offers/{offer_id}'. Declared path parameter offer_id
      needs to be defined as a path parameter in path or operation level
    - attribute paths.'/api/v2/intermodal/quotes/{batch_id}'. Declared path parameter batch_id
      needs to be defined as a path parameter in path or operation level
    - attribute
      paths.'/api/v2/load-offers/offers/{offer_id}'(get).responses.200.content.'application/json'.schema.items
      is missing
    - attribute paths.'/api/v2/capacity/{capacity_ref_number}'. Declared path parameter
      capacity_ref_number needs to be defined as a path parameter in path or operation level
    - attribute
      paths.'/api/v2/load-offers/offers'(get).responses.200.content.'application/json'.schema.items
      is missing
    - attribute paths.'/api/v2/shipments/{shipment_id}'. Declared path parameter shipment_id
      needs to be defined as a path parameter in path or operation level
Warnings:
    - Unused model: PhoneNumber
    - Unused model: EquipmentType
    - Unused model: TotalWidth
    - Unused model: TotalLength
    - Unused model: TotalHeight
    - Unused model: Requirements
    - Unused model: ShipmentMode

[error] Spec has 16 errors.

我试图理解为什么在新版本的openapi生成器中引入了更严格的验证,而没有任何明显的选项来更新旧文件。我使用的api.yaml文件的OpenAPI规范版本是3.0.1。我已经尝试在OpenAPI和Swagger网站上寻找任何线索,以便在不同版本的openapi-generator之间进行更改,但我没有找到任何非常有帮助的东西。

EN

回答 1

Stack Overflow用户

发布于 2021-02-10 04:05:14

我能够重现它。

This commit是引入这一变化的人,它链接到this issue

问题是validategenerate的行为方式并不相同,因此他们引入了相同类型的验证。

有关更多详细信息,validate命令现在执行以下调用

代码语言:javascript
复制
SwaggerParseResult result = new OpenAPIParser().readLocation(spec, null, options);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66125042

复制
相关文章

相似问题

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