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