【问题标题】:Open Api Generator supportJava6=true - Client not working on java 6Open Api Generator supportJava6=true - 客户端无法在 java 6 上运行
【发布时间】:2021-01-08 13:58:43
【问题描述】:

早安,

我正在尝试使用 Open API 在 Java 中生成 API 客户端。可悲的是,它需要与 java 6 一起使用。我启用了该标志,并且在 Java 11 上运行的开发环境(Eclipse)中一切正常,符合 Java 6。当我导出 JAR 并尝试在暂存环境中运行它时使用 JRE 1.6,我收到错误 ClassDefNotFound okhttp3/Interceptor。如果我尝试从 Maven 下载此依赖项,则会得到 Unsupported major.minor version 52.0

所以,我想知道标志 supportJava6 是否真的做某事,因为它似乎至少需要 Java 8。

我做错了吗?

最好的问候

更新

API 规范:https://api.civilianext.it/Protocollo/api/help/v1/docs

API 使用 client_ID 和 secret 进行授权。我已经为授权制作了一个小库,它适用于 Java6,所以身份验证正在工作并完成。

API 不起作用,通常在运行时(它会通过一些快速修复进行编译)。

我同时使用了 Swagger 和 OpenAPI,在 docker 本地运行。

注意:我多次更改这些文件,我不记得我尝试过的所有组合和配置。我确实知道我尝试了它在 StackOverflow 中发布的所有内容,甚至更多,但没有任何效果。我已经在这里待了大约一个月,只要有时间,我就会尝试一切。

这些是我尝试过的最新配置:

OpenAPI:

version: "3.6"
  services:
    openapi-codegen-cli:
      image: openapitools/openapi-generator-cli:v4.3.1
      volumes:
      - '.:/local'
      command: generate -g jaxrs-spec -i local/in/api.yml -o /local/out/jaxrs-client --additional-properties=dataLibrary=threetenbp,java8=false --skip-validate-spec

volumes:
 openapi_data:

大摇大摆:

swagger-codegen-cli:
   image: swaggerapi/swagger-codegen-cli
   volumes:
   - '.:/local'
   command: generate -l java -i local/json/api.json -c local/config/config.json -o /local/out/java-client

// config.json

{
  supportJava6: true,
}

生成代码后,我通常必须修复pom.xml,添加<pluginManagement> 标签。然后我用mvn clean install 构建项目。构建编译,我通常会在运行时遇到一些错误,关于不受支持的 major.minor 版本。

我也试过这个:https://github.com/OpenAPITools/openapi-generator/issues/8383

【问题讨论】:

  • 今天很难找到仍然兼容 Java 6 的任何东西。首先是因为一两年后,Java 5 不能再在最近的 Windows(我的意思是:Java 5java.exe)和 Java 6 下运行 认为自己也有被拒绝的危险。它的漏洞太多了,其中:10个或15个严重程度为10的10个...紧急情况下,您应该赶紧升级您的公司。
  • 我完全同意你的看法,但我一个人在 2005 年开始做一个项目,只需要运行一年左右,他们不在乎。所以我会浪费几个月的时间来添加功能和修复这个混乱的项目,只需几个月的使用哈哈。

标签: java openapi java-6 openapi-generator


【解决方案1】:

您应该使用 1.x 版的 okhttp。仔细阅读https://square.github.io/okhttp/changelog_1x/ 的更改日志。首先尝试使用 1.1.1 版本。

你可以从https://mvnrepository.com/artifact/com.squareup.okhttp/okhttp的maven仓库下载jar

【讨论】:

  • 我会试试的,谢谢。但我想知道,如果我标记了 supportJava6,为什么用 okhttp3 创建客户端?我也不认为它会这么简单。我可以编辑 pom.xml 并下载旧版本的 http,但我需要手动更改项目中的所有导入。而且我很确定 v 1.1.1 和 v 3 之间的区别是巨大的。有些东西肯定会刹车。但是话又说回来,如果我必须手动执行此操作并浪费数小时才能使其在 java 6 上运行,那么 supportJava6=true 标志的意义何在?嗯
  • 勾选 support Java6 时,编译器生成的字节码符合 Java6。你使用的 okhttp3 库是用 java8 编译的,所以不能用 java6 运行。错误“Unsupported major.minor version 52.0”说明了这一点。
  • 好的,我可以理解,但对我来说仍然没有意义。如果 openapi 正在为我生成一个 api 客户端,并且我要求支持 java 6,但是他们使用的一些关键库与 java 6 不兼容....有什么意义?那么“supportJava6”的用例是什么?
  • 阅读openapi-generator.tech/docs/generators/java标记Java6只有在客户端http是jersey1的情况下才能正常工作。
  • 阅读 stackoverflow.com/questions/36643869/… 似乎您也可以使用球衣 2,但您必须将其(在 pom.xml 中)降级到 2.6 版。
【解决方案2】:

当 Java 6 是目标约束时,用完整的 REST 堆栈扩展旧项目并不明显。

我建议尝试替代 OpenAPI 生成器 JAX-RS specJAX-RS CXF client,希望使用最新的 Java 6 兼容 CXF 3.0.6 version 或您可能找到的任何其他 JAX-RS 实现更容易配置 Maven 项目Java 6。

根据文档,您必须注意选项 dataLibrary=threetenbpjava8=false,它们应该在 4.3.1 版中工作(Java 6 支持已在 5.x 版中删除)

我建议按照演示项目提供的本教程进行操作:https://guntherrotsch.github.io/blog_2020/openapi-jaxrs-context.html

【讨论】:

  • 我试过了,但不知何故 jars-cxf 生成器无法从 api.yml 生成我的客户端(与 java-client 相同的 yml)。不知道为什么,它创建了每个类,但 API 类只是空方法,充满了 TODO
  • @GiammarcoBoscaro 我在推荐 CXF 特定生成器时可能犯了一个错误。请尝试通用 jaxrs-spec 生成器,也许首先从演示项目运行教程。即使生成的代码是没有 CXF 特定支持的标准 JAX-RS,它也应该在 CXF 或您可能为 Java 6 获得的任何 JAX-RS 实现上运行。提醒:不要忘记分配 StackOverflow Bounty。
  • @GiammarcoBoscaro 可惜你在未分配的赏金中失去了积分
  • 好吧,我不知道赏金是如何运作的,而且我也不关心积分。我正在寻找一个解决方案,但我还没有找到它……是时候仅使用 Java6 dml 单独编写 API 了
  • 这里是关于赏金的详细信息:meta.stackexchange.com/help/bounty
【解决方案3】:

只有 Java 客户端生成器中的 jersey1 库支持 supportJava6 选项。这是一个例子:

npm install -g @openapitools/openapi-generator-cli
openapi-generator-cli generate \
   -i https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/3_0/petstore.yaml \
   -g java \
   --library jersey1 \
   --additional-properties supportJava6=true \
   -o /var/tmp/java_api_client

仅供参考。 supportJava6 选项已被弃用,并将在即将发布的 OpenAPI Generator 5.x 版本中删除

【讨论】:

  • 我会尽快试试这个
  • 不出所料,我使用 JsonDeserializer 获得了不受支持的主要次要版本。
  • jackson 的依赖版本已更新以解决安全问题,只有 2.8 之前的版本支持 JDK 1.6:github.com/intuit/QuickBooks-V3-Java-SDK/issues/…。您将需要使用旧版本的 OpenAPI Generator 来生成可立即用于 1.6 的代码,或者您可以使用 2.7.9.5 手动更新输出
猜你喜欢
  • 2015-12-23
  • 1970-01-01
  • 2019-04-25
  • 1970-01-01
  • 1970-01-01
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多