我必須聯繫Web服務(WS)。我使用JDK 1.6,maven 3.04,Spring 3.20和apache的CXF 2.7.2。使用maven,我爲WS創建了stubs,併爲它提供了wsdl文件。我對WS客戶彈簧的配置,它看起來像REQ:Spring配置CXF ws客戶端 - 替換硬編碼變量,如'地址'
的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),並且可選地爲我在線之上創建它。然後,其他東西(價值)缺失等等。最後,所有參數都被正確填寫。所有缺失的東西/變量/對象都在生成的存根代碼中。
這工作就像一個魅力,但地址是atm在春季配置硬編碼。應用程序的配置參數存儲在一個簡單的數據庫中。使用spring bean可以訪問內容,因此我可以使用類似config.getValue(URL)的代碼在代碼中獲取變量。
我希望能夠在上面的代碼中更改'地址'(url WS),但還沒有找到辦法做到這一點。在生成的存根代碼中找不到setter。另一種方法是在spring servlet-context.xml文件中使用變量,但這些變量必須來自數據庫。第二種選擇。我可能會/希望從底部開始並使用Objectfactorys(在存根中)創建對象。然後設置正確的參數(在'新'或setter中),然後工作到頂部。一個同事做了這個(不是'地址'),這似乎工作,但代碼是最不理想/'凌亂'。此外,我希望能夠配置用戶名和密碼,而不是靜態的。在CXF網站上做了很多RTM,但無濟於事。
閱讀關於JaxWsProxyFactoryBean的一些信息,但無法知道如何在此處應用它,因爲我使用了Springs @autowire功能。
我一直在關於這個問題打斷了我的大腦,但看起來我的神經元在圈內運行。任何幫助/指針真的很感激。