import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import com.css.apps.base.dict.service.DictMan;
public class sendHttp{
private static Logger log = Logger.getLogger(sendHttp.class);
public static Map> a = new HashMap>();
public static List nodeNameList = new ArrayList<>();
public static Map sendHttpTest(String loginName,String flag,String number) throws IOException{
Map c = new HashMap();
//关闭
System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");
System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient", "stdout");
//创建httpclient工具对象
HttpClient client = new HttpClient();
//创建post请求方法
String urlstr = "";
PostMethod myPost = new PostMethod(urlstr);
//设置请求超时时间
client.setConnectionTimeout(300*1000);
String responseString = null;
try{
//设置请求头部类型
myPost.setRequestHeader("Content-Type","text/xml");
myPost.setRequestHeader("charset","utf-8");
//设置请求体,即xml文本内容,注:这里写了两种方式,一种是直接获取xml内容字符串,一种是读取xml文件以流的形式
String xmlString = getXmlInfo(loginName,number);
myPost.setRequestBody(xmlString);
myPost.setRequestEntity(new StringRequestEntity(xmlString,"text/xml","utf-8"));
int statusCode = client.executeMethod(myPost);
if(statusCode == HttpStatus.SC_OK){
BufferedInputStream bis = new BufferedInputStream(myPost.getResponseBodyAsStream());
byte[] bytes = new byte[1024];
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int count = 0;
while((count = bis.read(bytes))!= -1){
bos.write(bytes, 0, count);
}
byte[] strByte = bos.toByteArray();
responseString = new String(strByte,0,strByte.length,"utf-8");
bos.close();
bis.close();
}
}catch (Exception e) {
e.printStackTrace();
}
myPost.releaseConnection();
c = convertXmlToMap(responseString);
return c;
}
/**
* xml报文转换为map
* @author lpx
*/
public static Map> convertXmlToMap(String xmldata){
Map> map=new HashMap>();
Document doc=null;
try {
//将字符串转换为doc
doc=DocumentHelper.parseText(xmldata);
//获取根节点
Element root=doc.getRootElement();
map=getNodes(root);
nodeNameList = new ArrayList<>();
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
/**
* 从指定节点Element node开始,递归遍历其所有子节点
*/
@SuppressWarnings("unchecked")
public static Map> getNodes(Element node) {
// 当前节点的名称、文本内容和属性
String nodeName = node.getName();// 当前节点名称
String nodeText = node.getTextTrim();// 当前节点内容
//节点名为messageText加入map中去
if(!node.getTextTrim().isEmpty() && "messageText".equals(nodeName)){
nodeNameList.add(nodeText);
a.put("messageText",nodeNameList);
}
// 递归遍历当前节点所有的子节点
final List listElement = node.elements();// 所有一级子节点的list
for (final Element e : listElement) {// 遍历所有一级子节点
getNodes(e);// 递归
}
return a;
}
private static String getXmlInfo(String loginName,String number) {
StringBuilder sb = new StringBuilder();
sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
sb.append("");
sb.append("");
sb.append(""
+ loginName
+ "");
sb.append(""
+ number
+ "");
sb.append("");
sb.append("");
return sb.toString();
}
}