java - 不同环境使用不同的 WSDL

标签 java maven soap jaxb wsdl

我正在我的应用程序中使用 SOAP Web 服务。我通过在构建时提供 wsdl 使用 Maven 生成 jaxb 类。现在,这些 wsdls 正在针对每个更高的环境(即开发、集成、阶段和产品)进行更改。

这意味着每次升级环境时我都必须构建我的项目。这将违反部署规则 - 测试的版本应该在环境中向上移动直到生产。

如何避免每次升级环境时重建应用程序,并且根据该环境的 wsdl 还具有 jaxb 类。

最佳答案

我相信不重新构建就不可能更改 JAXB 类。但是,我想知道 WSDL 的结构(不考虑数据值)是否随着环境的不同而变化?如果它是一个不同的 WSDL,显然您需要一个全新的构建。

在上述场景中,您可以使用Maven Profile功能。

如果它是相同的 WSDL(仅数据值根据环境而变化),那么您的代码逻辑应该足够通用,可以处理不同的可能数据值。如果是这样,单个构建应该可以在所有环境中运行。

编辑 - 根据 Op 评论

Yes I am using maven profile for environment based build. And, the wsdl structure is going to be same across the environments so code break is not a problem. I was just wondering if there is way to this scenario.

根据评论,我觉得它不是一个构建相关领域,而是与以下假设的 Artifact 部署相关:

  1. 一旦在测试环境中进行了测试,该构建就可以在其他环境中完美运行。
  2. 构建将能够根据外部提供的参数选择正确的内部配置。例如如果 Java 应用程序构建具有 env-dev.configenv-prod.config 文件,则基于 JVM 标志 -Denv=prod >;它应该在运行时选择正确的配置文件。

有了这个假设,您就不需要 Maven 配置文件了。现在开始部署,您可以使用某种网络商店。例如一个 Maven 存储库。 deployment 脚本应从 webstore 中选取 Artifact 并进行部署。

流程可概括为:

  • 使用 Jenkin 等 CI(持续集成)工具进行测试构建。
  • 在 CI 工具中,作为构建后步骤的一部分,将 Artifact 上传到网络商店。例如。您可以上传到本地 Maven 存储库服务器。
  • 作为部署的一部分,部署脚本将从webstore获取 Artifact 并部署在测试环境中。
  • 通过上述机制将 Artifact 部署在测试环境上。执行测试。
  • 如果在测试过程中发现错误,请修复错误并通过 CI 工具重新构建/部署。
  • 再次使用 CI 工具进行 stage/prod 部署。请注意,您只需跳过构建过程即可。这将是一个仅部署的过程。
  • 部署过程应始终选择最新版本(或可配置版本)。所以,版本控制是一个重要的方面。

关于java - 不同环境使用不同的 WSDL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49245077/

相关文章:

java - 切换到 BigInteger 并且程序不再运行

java - 从java调用系统命令来保存日志文件

maven - 为 openapi-generator gradle 插件添加自定义代码生成实现

maven - 未知生命周期阶段 "\"

java - 如何查找是否需要排除 Maven Java 项目中的依赖项?

java - lambda 和流 : collect in a Map

java - 动态 JComboBox 大小

xml - SOAPUI 日期格式错误

c# - 适用于 Asp.net 和 C# 的亚马逊产品广告 API

java - 使用 Java 调用 SOAP Web 服务时如何修复不可读的 XML 响应?