我一直使用 wsimport 工具从 WSDL 文件生成客户端类。然后我将它们包含到项目的源代码树中,并将它们检入版本控制系统。但是最近我了解到有一个 maven 插件,叫做 jaxws-maven-plugin,它可以生成客户端类作为构建步骤(mvn clean jaxws:wsimport)。
虽然我不清楚使用这个插件的真正好处是什么,除了不需要将 WS 客户端类检查到源代码控制中。尽管如此,如果有人想在该项目上工作,他必须检查代码,然后运行 mvn jaxws:wsimport,然后才能开始工作(否则 IDE 将显示错误)。那么真正的好处是什么,什么时候应该使用插件而不是将客户端代码签入 VCS?
Maven 插件的执行可以在构建步骤中自动触发,例如,在项目编译之前,在 Maven 构建周期中有一个专门的“生成源”阶段。因此,开发人员不必记住手动生成它,使您更接近理想的一键式完整构建。
优点是,您可以从 VCS 中排除生成的类,因为它们可以按需重新生成。VCS 中生成代码的问题是,WSDL 文件中的更改将触发生成代码中的更改(显然)。但是当您首先处理合同时,只有 WSDL 文件中的更改是相关的。从 VCS 中排除生成的代码将在 VCS 提交日志中隐藏其中的冗余更改。您的 VCS 存储库更小,提交日志更清晰。
编辑针对评论:恕我直言,对这种情况有两种不同的看法:
1) 客户端类与服务接口的兼容性。
我不确定客户端类是否能够与 WS 通信,如果它们是从较旧的 wsdl 生成的。如果更改仅限于其他方法并且不涉及现有定义,我认为它可能会起作用。尽管如此,如果客户端代码总是在构建时重新生成,这不是问题,因为客户端代码会自动与 wsdl 同步。
2) 实现与客户端类的兼容性。
如果生成的客户端类由于修改了 wsdl 而发生变化,这可能会破坏使用客户端类的代码。但是,如果只有方法添加到 wsdl 并且现有方法保持原样,则重新生成的客户端类应因此向后兼容现有代码。在您的示例中:如果您的代码仅使用 A(),并且“新”客户端类现在除了A()之外还提供 B (),您的代码应该仍然可以工作。
总之; 在我看来,如果 WSDL 演化向后兼容,从 VCS 中排除生成的客户端代码而是按需生成它作为构建过程的一部分应该不会破坏现有的功能代码。如果 WSDL 更改不向后兼容,则会在编译时发生错误。但这些都是不可避免的 - 使用来自 VCS 的过时客户端类实际上可能会隐藏这些错误,直到您尝试执行应用程序。
| 归档时间: |
|
| 查看次数: |
936 次 |
| 最近记录: |