我必须联系 Web 服务 (WS)。我正在使用 JDK 1.6、maven 3.04、Spring 3.20 和 apache 的 CXF 2.7.2。使用 maven,我通过提供 wsdl 文件为 WS 创建了存根。我有一个用于 WS 客户端的 spring 配置,它看起来像
servlet-context.xml
<jaxws:client id="paymentClient" serviceClass="com.xxx.payment.Payment"
address="http://127.0.0:8088/mockPaymentBinding" <!-- SOAPUI mock -->
username="username"
password="secret" />
<!- username and password are for wsdl basic authentication -->
在 Java 代码中,它看起来像
@Autowired
com.xxx.payment.Payment client;
..
// Set all needed parameters.
PaymentGetBalanceResponse response = null;
PaymentGetBalance getBalance = new PaymentGetBalance();
RequestGetBalance value = new RequestGetBalance();
value.setTransactionId("transActionId");
getBalance.setRequest(value );
// Now call the WS and get the response
response = client.getBalance(getBalance); // generated by the cxf -client argument.
“响应”行由 CXF 作为示例生成。然后 Eclipse 告诉我缺少某些东西(getbalance),并可以选择在线上方为我创建它。然后其他东西(价值)缺失等等。最后,所有参数都正确填写。所有缺少的东西/变量/对象都在生成的存根代码中。
这就像一个魅力,但地址是在 spring 配置中硬编码的 atm。应用程序的配置参数存储在一个简单的数据库中。使用 spring bean 可以访问内容,因此我可以使用 config.getValue(URL); 之类的东西在代码的最后获取变量;
我希望能够更改上面代码中的“地址”(url WS),但还没有找到方法。在生成的存根代码中找不到设置器。另一种方法是在 spring servlet-context.xml 文件中使用变量,但这些变量必须来自数据库。第二种选择。我可能/希望从底部开始并使用 Objectfactorys(在存根中)来创建对象。然后设置正确的参数(在“新”或设置器中),然后按我的方式到达顶部。一位同事已经这样做了(不是为了“地址”),这似乎可行,但代码充其量是次优/“混乱”。我还希望能够配置用户名和密码,而不是静态的。在 CXF 网站上做了很多 RTM,但无济于事。
阅读有关 JaxWsProxyFactoryBean 的一些内容,但由于我使用 Springs @autowire 功能,所以不知道如何在此处应用它。
我一直在为这个问题绞尽脑汁,但似乎我的神经元在转圈。任何帮助/指针都非常感谢。