cxf通過wsdl2java生成客戶端調用webservice時,如果服務器端需要通過用戶名和密碼驗證,則客戶端必須傳遞驗證所必須的用戶名和密碼,剛開始想通過url傳遞用戶名和密碼,於是在wsdl文件中直接在<soap:address location 標記中添加加入用戶名和密碼,但是webservice接收不到參數,此種方法行不通。后來在接口方法調用前用BindingProvider 得到RequestContext,在其中設置了請求需要的用戶名和密碼,接口順利通過驗證,執行成功,具體代碼如下:
/**
* 根據給定的參數執行接口程序
*
* @param request
* @return
*/
public ZPILOT01SSOCMMIF001CONResponse executeService(
ZPILOT01SSOCMMIF001CON request) throws Exception {
// 得到本地服務類
MIZPILOT01SSOCMMIF001CONOutSynService service = new MIZPILOT01SSOCMMIF001CONOutSynService();
// 得到接口的代理
MIZPILOT01SSOCMMIF001CONOutSyn stub = service
.getMIZPILOT01SSOCMMIF001CONOutSynPort();
// 設置訪問接口服務器的用戶名和密碼
BindingProvider bp = (BindingProvider) stub;
Map<String, Object> context = bp.getRequestContext();
context.put(BindingProvider.USERNAME_PROPERTY, XI_USER_NAME);
context.put(BindingProvider.PASSWORD_PROPERTY, XI_PASSWORD);
// 執行接口
ZPILOT01SSOCMMIF001CONResponse response = stub
.miZPILOT01SSOCMMIF001CONOutSyn(request);
// 返回響應
return response;
}