调用其他系统的webservice接口会有账号密码的认证。
之前没遇到这种,查询了很久,记录下来。
public Object[] handler(WsObject<Map<String, Object>> obj) throws Exception {
Map<String, Object> paramObj = obj.getObj();
String serviceName = "WSTEST";
JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();
Client client = clientFactory.createClient("http://localhost:8080/ws/WSTEST?wsdl");
//ws接口账号密码
this.httpBasicAuth(client,"admin","123456");
Endpoint endpoint = client.getEndpoint();
QName methodName = new QName("targetNamespace", "WSTEST");
JSONObject jsonObject = JSONObject.fromObject(paramObj);
String paramStr = jsonObject.toString();
Object[] result = client.invoke(methodName, paramStr);
return result;
}
//webservice账号密码校验,就是加入Header里
public void httpBasicAuth(Client client,String username,String password){
HTTPConduit http = (HTTPConduit) client.getConduit();
//设置超时时间
HTTPClientPolicy policy = new HTTPClientPolicy();
long timeout = 60 * 60 * 1000;
policy.setConnectionTimeout(timeout);
policy.setReceiveTimeout(timeout);
http.setClient(policy);
//配置认证
AuthorizationPolicy authorizationPolicy = new AuthorizationPolicy();
authorizationPolicy.setUserName(username);
authorizationPolicy.setPassword(password);
authorizationPolicy.setAuthorizationType("Basic");
http.setAuthorization(authorizationPolicy);
}