我已经编写了一个java webservice,将它部署在我的tomcat上,并通过我的webbrowser访问服务WSDL,一切看起来还不错。 下一步是生成代理类,客户端可以使用代理类与网站进行通信。这就是我接下来要做的事情:
让我们假设我的wsdl可以通过:http://localhost:8080/testSvc/testSvc?wsdl
访问使用wsimport工具,我使用以下命令生成代理: $> wsimport http://localhost:8080/testSvc/testSvc?wsdl
问题是localhost:8080在生成的类中被硬编码,如果我在8080以外的端口上部署服务,则客户端无法访问它,因为客户端仍将尝试在端口8080上访问该服务。
有没有以端口号没有硬编码的方式开发代理类?这样我们就可以在任何端口上部署服务了吗?
我尝试更新ENDPOINT_ADDRESS_PROPERTY,但这没有用,因为代码在立即代理类的实例时失败了。它永远不会真正达到我可以从代理类中覆盖它已准备好的ENDPOINT_ADDRESS。
答案 0 :(得分:6)
一种方法是使用wsimport参数
-wsdllocation <location>
并将其指向新的WSDL。
或者您可以使用
-catalog选项。
要动态更改地址,请使用以下代码:
service = new Service();
port = service.getxxxPort();
((BindingProvider) port).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, newUrl);
答案 1 :(得分:-1)
使用-keep
parameter保留wsimport生成的源文件。从那里,您可以根据需要更改wsimport生成的源代码中的端点URL。