package com.artfess.base.util;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
/**
* Soap工具类
*
* @company 广州宏天软件股份有限公司
* @author heyifan
* @email heyf@jee-soft.cn
* @date 2018年4月11日
*/
public class SoapUtil {
protected static Logger logger = LoggerFactory.getLogger(SoapUtil.class);
/**
* 获取请求的数据
*
* @param url 请求的URl
* @param soapXml soap 包的Xml
* @return map的key :
*
* success : 是否成功,true 成功,false 失败
*
* code : 状态码,http 请求状态码200 表示成功,500 表示服务器异常 -100表示服务器未启动
*
* response : 请求返回的soap包
*
* result 错误正确返回的结果
*
*/
public static Map getResponse(String url, String soapXml) {
Map map = new HashMap();
StringBuffer sb = new StringBuffer();
int code = -100;// 状态码
boolean success = false;
String result = "";
HttpURLConnection conn = null;
OutputStreamWriter os = null;
InputStreamReader isr = null;
InputStream is = null;
BufferedReader br = null;
try {
URL servletURL = new URL(url);
conn = (HttpURLConnection) servletURL.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");// 解决乱码问题
// Send data
os = new OutputStreamWriter(conn.getOutputStream());
os.write(soapXml);
os.flush();
code = conn.getResponseCode();
if (code == HttpStatus.OK.value()) {// 200 : OK(成功) 一切正常
is = conn.getInputStream();
success = true;
} else
is = conn.getErrorStream();
// Get the response
isr = new InputStreamReader(is, "UTF-8");
br = new BufferedReader(isr);
String line = "";
while ((line = br.readLine()) != null) {
sb.append(line);
}
} catch (Exception e) {
logger.error("请求出错了.", e);
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw, true));
result = sw.toString();
} finally {
// 关闭流
try {
if (os != null)
os.close();
if (is != null)
is.close();
if (isr != null)
isr.close();
if (br != null)
br.close();
} catch (Exception e) {
e.printStackTrace();
logger.error("关闭流出错.", e);
}
}
map.put("success", success);
map.put("code", code);
map.put("response", sb.toString());
map.put("result", result);
return map;
}
}