微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 使用wsimport生成的webservice客户端更改URL

我正在为一个访问WSDL描述的Web服务的 Java应用程序编写一个模块.源WSDL直接从我认为是ASP.NET Web服务下载;服务网址以.asmx扩展名结尾,并且在浏览器中查看服务URL显示可用于下载WSDL的链接.

我的一个关键要求是能够在不重新编译的情况下切换服务URL.给我的URL显然是一个测试服务器,我知道在生产中我将被给予一个使用的生产URL.我也希望能够自己创建一个模拟服务器进行测试,并保留以后在不重新编译服务被移动的情况下将来指定新的URL的能力.事实上,我想安装我们的应用程序,以便能够在不同的URL实例化webservice的多个实例.

但是我的想法似乎并没有与wsimport工具正在为我做些什么.遵循f1sh的答案here,我使用以下命令从我下载的WSDL生成Java代码

wsimport -Xnocompile -keep -b binding.xml wsdlFile.wsdl

我发现生成代码对我下载的wsdlFile.wsdl(包含服务URL)有硬编码引用.我们的应用程序不会以通过在运行时编辑WSDL文件进行配置的方式运行.我需要在构建时将代码编译到我的应用程序中,并且可以在实例化时设置服务URL.

我不完全确定为什么WSDL甚至需要在运行时解析;我的理解是,WSDL提供足够的信息来生成可以访问webservice的代码,所以我不知道它提供给生成代码,而不是服务URL,我不知道为什么服务URL不提供构造函数或通过生成的webservice类上的方法进行配置.我一定是错过了一些东西.

这种情况的一般做法是什么?大多数人会为每个要使用的网址重新生成代码?是否在运行时生成代码?我可以使用另一个WSDL工具,它将使用可配置的URL构建客户端代码

解决方法

This approach requires me to also supply a javax.xml.namespace.QName object,which I don’t yet understand,as the second argument.

从您生成的源复制一个. QName是一个XML qualified name一个“唯一”的身份.

I still don’t understand why the WSDL is needed at runtime.

我不能说我知道肯定,但WSDL基本上是一个模式.通过提供它,我猜你给JAX-WS一个验证SOAP响应的机制.我认为JAXB绑定不足以做到这一点.

我始终使用生成的服务中的双参数构造函数,通过ClassLoader.getResource方法提供一个URL,将WSDL嵌入到我的jar中.与任何模式一样,使用远程或文件系统URL这是愚蠢的不太优化.

this question for how to set the end-point at runtime.

原文地址:https://www.jb51.cc/java/125041.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐