如何生成使用WSDL动态位置的SOAP客户端代码?

时间:2013-11-15 21:57:21

标签: java web-services soap wsdl

我正在使用wsimport为我的应用程序提供的几个WSDL生成客户端代码。我必须在几个不同的地方运行该应用程序。我正在尝试简化客户端代码生成/管理问题。

我有点滑回来的是这个。我有3个接口,应用程序安装在3个地方。此时,我必须生成9个源包。我还有3个源目录,每个接口都有驱动程序代码。

所以,我有:

 src/srvr1.intf1/
 src/srvr1.intf2/
 src/srvr1.intf3/
 src/srvr2.intf1/
 src/srvr2.intf2/
 src/srvr2.intf3/
 src/srvr3.intf1/
 src/srvr3.intf2/
 src/srvr3.intf2/
 src/all.intf1
 src/all.intf2
 src/all.intf3

当我不得不将它移动到十几个网站时,你可以看到它会有多糟糕。

我遇到的一件事是我可以进入生成的代码并用System.getProperty(“currentWSDL”)替换硬编码的WSDL位置,我可以在运行时设置它。所以,我从12点到6点。

我可以在“all”代码中使用内省来使它成为一个类。这让我得到4.并且添加服务器不会增加这个数字。

因此,据我所知,如果我进入并将WSDL引用更改为属性查找,那么每次运行wsimport时我都必须重新执行该操作。这有意义吗?

有没有办法让wsimport使用属性读取而不是WSDL的硬编码字符串?我运行wsimport时甚至可以给它一个WSDL的值。我只是不想为运行完全相同的应用程序的n个服务器维护所有30多个客户端类的n个副本。

1 个答案:

答案 0 :(得分:2)

您可以像这样设置服务网址。除非更改,否则不需要为不同的服务器部署生成wsdl客户端。您生成代理,然后在每个客户端从任何资源(本地文件,数据库...)读取URL并设置这样的URL

String url = //从配置文件或db等任何其他资源中读取url ((BindingProvider)proxy).getRequestContext()。put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,url);