我正在尝试编写一个模块,用于访问描述为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构建客户端代码?