以Http方式调用WebService接口
场景:公司需要第三方流水的数据,三方系统接口对外的形式是webservice的接口,而公司的系统没有webservice模块,以http调用接口非常的方便实用。
调用方式:HTTPClient
HttpClient方式调用webservice api
public static String doPostWebServiceURL(String point, String xmlParams, String soapAction)throws Exception {
String result = "";
// 创建HttpClientBuilder
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
// HttpClient
CloseableHttpClient closeableHttpClient = httpClientBuilder.build();
HttpPost httpPost = new HttpPost(point);
try {
httpPost.setHeader("Content-Type", "text/xml;charset=UTF-8");
httpPost.setHeader("SOAPAction", soapAction);
StringEntity data = new StringEntity(xmlParams,
Charset.forName("UTF-8"));
httpPost.setEntity(data);
CloseableHttpResponse response = closeableHttpClient
.execute(httpPost);
HttpEntity httpEntity = response.getEntity();
if (httpEntity != null) {
result = EntityUtils.toString(httpEntity, "UTF-8");
}
} catch (Exception e) {
log.error("调用远程WebService接口异常:{}" , e);
throw e;
}finally {
IOUtils.closeQuietly(closeableHttpClient);
}
return result;
}
业务代码:
拼接参数
String params = "<UPDATEDATEBEGIN>"+req.getUpdateDateBegin()+"</UPDATEDATEBEGIN>" +
"<UPDATEDATEEND>"+req.getUpdateDateEnd()+"</UPDATEDATEEND>" +
"<PAGEINDEX>"+req.getPageIndex()+"</PAGEINDEX>" +
"<PAGESIZE>"+req.getPageSize()+"</PAGESIZE>"; //必传参数拼接
String URI = systemParamService.getSystemParam("SYNC_PULL_FUND_DATA_URL"); //获取系统参数
String xmlResp = null;
try {
xmlResp = doPostWebServiceURL(URI, xmlParams);
//解析xml dom方式
String returnMessageXml = StringEscapeUtils.unescapeXml(xmlResp);
Document doc = DocumentHelper.parseText(returnMessageXml);
Element rootElement = doc.getRootElement();
Element datasElement = rootElement.element("Body").element("sendResponse").element("returnMessage").element("XERP").element("BODY");
List<Element> elements = (List<Element>)datasElement.elements(); //获取到返回的参数list
......
}catch(){
......
}