java进行webservice调用
package com.sgcc.yjzh.util;
import java.io.IOException;
import java.nio.charset.Charset;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import net.sf.json.JSONObject;
public class WebServiceUtil {
/**
* 接口调用请求xml拼接
* @param method 调用方法
* @param obj 接口报文内容
* @return
*/
public static String joinSoapXml(String method,String obj){
StringBuffer sb=new StringBuffer();
sb.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:sgcc=\"http://www.sgcc.com.cn\">");
sb.append(" <soapenv:Header/>");
sb.append(" <soapenv:Body>");
sb.append("<sgcc:"+method+">");
sb.append("<OUTPUT>");
sb.append("<![CDATA[");
sb.append(obj);
sb.append("]]>");
sb.append("</OUTPUT>");
sb.append("</sgcc:"+method+">");
sb.append("</soapenv:Body>");
sb.append("</soapenv:Envelope>");
return sb.toString();
}
/**
* http调用接口方法
* @param url 接口地址
* @param soapRequestData 接口xml报文
* @return
*/
public static String postSoap(String url,String soapRequestData){
String xmlString="";
CloseableHttpClient httpClient = null;
try {
HttpClientBuilder httpClientBuilder=HttpClientBuilder.create();
httpClient = httpClientBuilder.build();
HttpPost httppost = new HttpPost(url); //webservice服务地址
HttpEntity data = new StringEntity(soapRequestData,Charset.forName("utf-8"));
httppost.setHeader("Content-Type","application/soap+xml; charset=utf-8");
httppost.setEntity(data);
CloseableHttpResponse response=httpClient.execute(httppost);
HttpEntity entity=response.getEntity();
if(entity!=null){
xmlString = EntityUtils.toString(entity,"utf-8");
}
} catch (Exception e) {
e.printStackTrace();
return e.getMessage();
} finally {
try {
httpClient.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return xmlString;
}
/**
* 解析调用接口返回的报文
* @param json
* @return
*/
public static List<Map<String,Object>> ReturnXmlForList(String paraString){
List<Map<String,Object>> list = new ArrayList();
try {
Document doc;
doc = DocumentHelper.parseText(paraString);
Element root = doc.getRootElement();
Iterator itRoot = root.elementIterator();
while (itRoot.hasNext()) {
Map<String,Object> map = new LinkedHashMap<String, Object>();
Element ROOTChild = (Element) itRoot.next();
Iterator ITEM = ROOTChild.elementIterator();
while(ITEM.hasNext()){
Element itemChild = (Element) ITEM.next();
map.put(itemChild.getName(), itemChild.getStringValue());
}
list.add(map);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
/**
* 接口返回报文的拼接
* @param code 代码
* @param msg 消息
* @param data 数据
* @return
*/
public static String returnSoapJson(String code,String msg,
JSONObject data){
JSONObject obj=new JSONObject();
obj.put("code", code);
obj.put("msg", msg);
obj.put("data", data);
return obj.toString();
}
}