Web服务代理类

时间:2010-09-09 23:31:13

标签: java web-services wsimport

我已经编写了一个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。

2 个答案:

答案 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。