HTTP调用webservice接口方法
完整代码如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.dom4j.Element;
/**
*
* Copyright © 2020 All rights reserved.
* @Title: WebServicePostSoapUtil
* @Package:
* @Description:
* @author:
* @date: 2020年3月30日
*/
public class WebServicePostSoapUtil {
static Logger logger = LoggerFactory.getLogger(WebServicePostSoapUtil.class);// 编码格式。发送编码格式统一用UTF-8
private static final String ENCODING = "UTF-8";// 设置连接超时时间,单位毫秒。
private static final int CONNECT_TIMEOUT = 6000;// 请求获取数据的超时时间(即响应时间),单位毫秒。
private static final int SOCKET_TIMEOUT = 6000;
public static Map<String,Object> map = new HashMap<String,Object>();
/**
* 发起webservice请求
* @param url
* @param soap
* @return String
* @throws Exception
*/
public static String doPostSoap(String url, String soap,String resultNodeName) throws IOException, DocumentException {
String returnStr = "";
//创建url地址
URL wsUrl = new URL(url);
//打开连接
URLConnection conn = wsUrl.openConnection();
//转换成HttpURL
HttpURLConnection httpConn = (HttpURLConnection) conn;
//打开输入输出的开关
httpConn.setDoInput(true);
httpConn.setDoOutput(true);
//设置请求方式
httpConn.setRequestMethod("POST");
//设置请求的头信息
httpConn.setRequestProperty("Content-type", "text/xml;charset=UTF-8");
//获得输出流
OutputStream out = httpConn.getOutputStream();
//发送数据
out.write(soap.getBytes());
//判断请求成功
if (httpConn.getResponseCode() == 200) {
//获得输入流
InputStream in = httpConn.getInputStream();
//使用输入流的缓冲区
BufferedReader reader = new BufferedReader(new InputStreamReader(in,"UTF-8"));
StringBuffer sb = new StringBuffer();
String line = null;
//读取输入流
while ((line = reader.readLine()) != null) {
sb.append(line);
}
logger.info("返回xml:"+sb.toString());
Map map = parse(sb.toString());
logger.info("返回xml转map:"+map);
returnStr=map.get(resultNodeName).toString();
in.close();
}out.close();
httpConn.disconnect();
return returnStr;
}
public static Map parse(String soap) throws DocumentException{
Document doc = DocumentHelper.parseText(soap);//报文转成doc对象
Element root = doc.getRootElement();//获取根元素,准备递归解析这个XML树
getCode(root);
return map;
}public static void getCode(Element root){
if(root.elements()!=null){
List<Element>list = root.elements();//如果当前跟节点有子节点,找到子节点
for(Element e:list){//遍历每个节点
if(e.elements().size()>0){
getCode(e);//当前节点不为空的话,递归遍历子节点;
}
if(e.elements().size()==0){
map.put(e.getName(), e.getTextTrim());
}//如果为叶子节点,那么直接把名字和值放入map
}
}
}
}