我正在尝试为访问 WSDL 描述的 web 服务的 Java 应用程序编写一个模块。源 WSDL 是直接从我认为是 ASP.NET Web 服务下载的;服务 URL 以 .asmx 扩展名结尾,在浏览器中查看服务 URL 会显示一个链接,该链接可用于下载 WSDL。
我的一个关键要求是能够在不重新编译的情况下切换服务 URL。给我的 URL 显然是一个测试服务器,我知道在生产中我会得到一个生产 URL 来使用。我还希望能够自己创建一个模拟服务器进行测试,并保留将来指定新 URL 的能力,而无需在移动服务时重新编译。事实上,我希望安装我们的应用程序能够在不同的 URL 上实例化 Web 服务的多个实例。
但我的概念似乎与 wsimport 工具为我所做的不匹配。按照 f1sh 在此处的回答,我使用以下命令从下载的 WSDL 生成了 Java 代码:
wsimport -Xnocompile -keep -b binding.xml wsdlFile.wsdl
我发现生成的代码具有对我下载的 wsdlFile.wsdl 的硬编码引用,其中包含服务 URL。我们的应用程序不会以通过在运行时编辑 WSDL 文件来配置的方式运行。我需要在构建时将代码编译到我的应用程序中,并且可以在实例化时设置服务 URL。
我不完全确定为什么 WSDL 甚至需要在运行时进行解析;我的理解是 WSDL 提供了足够的信息来生成可以访问 web 服务的代码,所以我不确定它为生成的代码提供了什么而不是服务 URL,我不确定为什么没有提供服务 URL构造函数或可通过生成的 Web 服务类上的方法进行配置。我肯定错过了什么。
这种情况的一般做法是什么?大多数人是否会为他们将要使用的每个单独的 URL 重新生成代码?代码是在运行时生成的吗?我可以使用另一个 WSDL 工具来构建具有可配置 URL 的客户端代码吗?