标签:
环境:J2EE 5.0
HTTP请求工具类
package xxx.util;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpConnectionManager;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.commons.httpclient.util.IdleConnectionTimeoutThread;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* httpClient处理
*/
public class HttpProtocolHandler {
/** 连接超时时间,缺省为8秒钟 */
private int defaultConnectionTimeout = 8000;
/** 回应超时时间,缺省为30秒钟 */
private int defaultSoTimeout = 30000;
/** 闲置连接超时时间,缺省为60秒钟 */
private int defaultIdleConnTimeout = 60000;
/**定义每台主机允许的最大连接数,默认为2*/
private int defaultMaxConnPerHost = 80;
/**httpConnectionManager管理的最大连接数,默认为20*/
private int defaultMaxTotalConn = 100;
/** 默认等待HttpConnectionManager返回连接超时(只有在达到最大连接数时起作用)*/
private static final long defaultHttpConnectionManagerTimeout = 3 * 1000;
/** HTTP连接管理器,该连接管理器必须是线程安全的. */
private HttpConnectionManager connectionManager;
private static HttpProtocolHandler httpProtocolHandler = new HttpProtocolHandler();
/** 工厂方法 */
public static HttpProtocolHandler getInstance() {
return httpProtocolHandler;
}
/**
* 私有的构造方法
*/
private HttpProtocolHandler() {
// 创建一个线程安全的HTTP连接池
connectionManager = new MultiThreadedHttpConnectionManager();
connectionManager.getParams().setDefaultMaxConnectionsPerHost(defaultMaxConnPerHost);
connectionManager.getParams().setMaxTotalConnections(defaultMaxTotalConn);
connectionManager.getParams().setConnectionTimeout(defaultConnectionTimeout);
connectionManager.getParams().setSoTimeout(defaultSoTimeout);
connectionManager.getParams().setIntParameter("http.socket.timeout", 30000);
IdleConnectionTimeoutThread ict = new IdleConnectionTimeoutThread();
ict.addConnectionManager(connectionManager);
ict.setConnectionTimeout(defaultIdleConnTimeout);
ict.start();
}
/**执行标志*/
private static boolean execFlag = true;
/**正在执行文件标志map*/
private static Map<String, Integer> writingFlagMap = new HashMap<String, Integer>();
/**恢复次数map*/
private static Map<String, Integer> reConnectMap = new HashMap<String, Integer>();
public boolean isExecFlag() {
return execFlag;
}
public void setExecFlag(boolean execFlag) {
HttpProtocolHandler.execFlag = execFlag;
}
public static Map<String, Integer> getWritingFlagMap() {
return writingFlagMap;
}
public void setWritingFlagMap(Map<String, Integer> writingFlagMap) {
HttpProtocolHandler.writingFlagMap = writingFlagMap;
}
/* ******************* 以下是请求文件*********************** */
/**
* 请求文件
* @param requestUrl
* @param savePath
* @return
*/
public boolean executeGetFile(String requestUrl,String savePath){
HttpClient httpclient = new HttpClient(connectionManager);
httpclient.getParams().setConnectionManagerTimeout(defaultHttpConnectionManagerTimeout);
FileOutputStream out = null;
// System.out.println("http://"+requestUrl);
HttpMethod method = new GetMethod("http://"+requestUrl);
InputStream in = null;
int len = -1;
byte[] b = new byte[1024];
try {
httpclient.executeMethod(method);
in = method.getResponseBodyAsStream();
if(method.getStatusCode()!=200){
System.out.println("信息:http://"+requestUrl+"访问失败,刷新信息失败。");
return false;
}
out = new FileOutputStream(new File(savePath));
while((len=in.read(b))!=-1){
out.write(b, 0, len);
}
out.flush();
} catch (HttpException e) {
e.printStackTrace();return false;
} catch (IOException e) {
e.printStackTrace();return false;
}finally{
try {
if(out!=null){out.close();}
} catch (IOException e) {
e.printStackTrace();
}
method.releaseConnection();
}
return true;
}
/**
* 直接读取文件信息(对于文件不大的)
* @param requestUrl
* @return
*/
public String executeGetString(String requestUrl){
HttpClient httpclient = new HttpClient(connectionManager);
httpclient.getParams().setConnectionManagerTimeout(defaultHttpConnectionManagerTimeout);
HttpMethod method = new GetMethod("http://"+requestUrl);
// method.setRequestHeader("Cookie","JSESSIONID="+sessionID);
method.getParams().setContentCharset("UTF-8");
String resultStr = "";
try {
httpclient.executeMethod(method);
resultStr = method.getResponseBodyAsString();
if(method.getStatusCode()!=200){
return null;
}
} catch (HttpException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}finally{
method.releaseConnection();
}
return resultStr;
}
/**
* 直接读取文件信息(对于文件不大的)
* @param requestUrl
* @return
*/
public String executeWSGetString(String requestUrl){
HttpClient httpclient = new HttpClient(connectionManager);
httpclient.getParams().setConnectionManagerTimeout(defaultHttpConnectionManagerTimeout);
HttpMethod method = new GetMethod("http://" + requestUrl);
method.setRequestHeader("Sec-WebSocket-Key", " esAjYnZeGHsnmqBc/BtOfA==");
method.setRequestHeader("Upgrade", "websocket");
method.getParams().setContentCharset("UTF-8");
String resultStr = "";
try {
httpclient.executeMethod(method);
resultStr = method.getResponseBodyAsString();
if (method.getStatusCode() != 200) {
return null;
}
} catch (HttpException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
} finally {
method.releaseConnection();
}
return resultStr;
}
/* ******************* 以下是POST带参数请求*********************** */
/**
* POST带参数请求
* @param requestUrl
* @param params
* @return
*/
public String executePostReq(String requestUrl,Map<String, String> params){
HttpClient httpclient = new HttpClient(connectionManager);
httpclient.getParams().setConnectionManagerTimeout(defaultHttpConnectionManagerTimeout);
// PostMethod pmethod = new PostMethod("http://"+requestUrl);
PostMethod pmethod = new PostMethod(requestUrl);
NameValuePair[] nvps = new NameValuePair[params.size()];
Set<String> keys1 = params.keySet();
int i = 0;
for(String name1:keys1){
NameValuePair p = new NameValuePair(name1,params.get(name1));
nvps[i] = p;
i++;
}
pmethod.setRequestBody(nvps);
pmethod.getParams().setContentCharset("UTF-8");
try {
httpclient.executeMethod(pmethod);
if(pmethod.getStatusCode()!=200){
return null;
}
String resultStr = pmethod.getResponseBodyAsString();
return resultStr;
} catch (HttpException e) {
e.printStackTrace();return null;
} catch (IOException e) {
e.printStackTrace();return null;
}finally{
pmethod.releaseConnection();
}
}
/**
* POST带参数请求
* @param requestUrl
* @param paramsStr
* @return
*/
public String executePostReq1(String requestUrl,String paramsStr){
HttpClient httpclient = new HttpClient(connectionManager);
httpclient.getParams().setConnectionManagerTimeout(defaultHttpConnectionManagerTimeout);
PostMethod pmethod = new PostMethod(requestUrl);
pmethod.setRequestBody(paramsStr);
pmethod.getParams().setContentCharset("UTF-8");
pmethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");
pmethod.addRequestHeader("Content-Type","text/html;charset=utf-8");
try {
httpclient.executeMethod(pmethod);
if(pmethod.getStatusCode()!=200){
return null;
}
String resultStr = pmethod.getResponseBodyAsString();
return resultStr;
} catch (HttpException e) {
e.printStackTrace();return null;
} catch (IOException e) {
e.printStackTrace();return null;
}finally{
pmethod.releaseConnection();
}
}
}
SOAP请求工具类
package xxx.util;
import javax.xml.namespace.QName;
import javax.xml.soap.MimeHeaders;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPHeaderElement;
import javax.xml.soap.Name;
import javax.xml.soap.SOAPElement;
import javax.xml.ws.Dispatch;
import javax.xml.ws.Service;
import javax.xml.ws.Service.Mode;
import javax.xml.ws.soap.SOAPBinding;
import java.net.URL;
import java.util.Map;
import java.util.Set;
import javax.activation.DataHandler;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Node;
public class SoapSender {
private MessageFactory msgFactory;
private static SoapSender instance = new SoapSender();
private SoapSender(){
try {
//创建消息工厂
msgFactory = MessageFactory.newInstance();
} catch (SOAPException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
public static SoapSender getInstance() {
return instance;
}
public MessageFactory getMessageFactory() {
return msgFactory;
}
/* ******************* 以下是创建SOAPMessage*********************** */
/**
* 创建一个默认的SOAPMessage
* @return
*/
public SOAPMessage getMessage() throws SOAPException {
return msgFactory.createMessage();
}
/**
* 创建SOAPMessage
* @param params
* @return
*/
public SOAPMessage getMessage(Map<String, String> params) throws SOAPException, Exception {
// 创建消息对象
SOAPMessage message = msgFactory.createMessage();
// 获得一个SOAPPart对象
SOAPPart soapPart = message.getSOAPPart();
// 获得信封
SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
// // 获得消息头
// SOAPHeader soapHeader = soapEnvelope.getHeader();
// // 添加头元素
// SOAPHeaderElement headerElement = soapHeader.addHeaderElement(soapEnvelope.createName("Fault", "soapenv","http://www.xxx.cn"));
// headerElement.addTextNode("JWS0229043");
// *****************创建soap消息主体*****************
SOAPBody soapBody = soapEnvelope.getBody();
// 添加消息主体
// Name bodyName = soapEnvelope.createName("INFO", "SOAP-ENV","http://www.xxx.cn");
Name bodyName = soapEnvelope.createName("INFO");
SOAPBodyElement bodyElement = soapBody.addBodyElement(bodyName);
Set<String> keys = params.keySet();
int i = 0;
for(String name:keys){
Name eleName = soapEnvelope.createName(name);
SOAPElement se = bodyElement.addChildElement(eleName);
// se.addChildElement("ServiceCode").addTextNode("10000061");
se.addTextNode(params.get(name));
i++;
}
// *************************************************
// // 添加SOAP附件
// URL url = new URL("http://xxx/1.jpg");
// DataHandler dataHandler = new DataHandler(url);//use the JAF
// message.addAttachmentPart(message.createAttachmentPart(dataHandler));
// 更新SOAP消息
message.saveChanges();
return message;
}
/**
* 创建SOAPMessage
* @param headers
* @param filePath:soap格式文件路径
* @return
*/
public SOAPMessage getMessage(MimeHeaders headers, String filePath) throws IOException, SOAPException {
// filePath = Thread.currentThread().getContextClassLoader().getResource("SOAPMessageResp.xml").getPath();
InputStream is = new FileInputStream(filePath);
SOAPMessage message = msgFactory.createMessage(headers, is);
is.close();
return message;
}
/* ******************* 以下是发送SOAP请求*********************** */
/**
* 发送SOAP请求
* @param requestUrl
* @param message
*/
public void send(String requestUrl,SOAPMessage message) throws SOAPException, IOException {
//创建SOAP连接
SOAPConnectionFactory scf = SOAPConnectionFactory.newInstance();
SOAPConnection sc = scf.createConnection();
/*
* 实际的消息是使用 call()方法发送的,该方法接收消息本身和目的地作为参数,并返回第二个 SOAPMessage 作为响应。
* call方法的message对象为发送的soap报文,url为mule配置的inbound端口地址。
*/
URL urlEndpoint = new URL(requestUrl);
// 响应消息
SOAPMessage response = sc.call(message, urlEndpoint);
// *************************************************
if (response != null) {
//输出SOAP消息到控制台
System.out.println("Receive SOAP message:");
response.writeTo(System.out);
} else {
System.err.println("No response received from partner!");
}
// *************************************************
// 关闭连接
sc.close();
}
public void send1(String requestUrl,SOAPMessage message) throws SOAPException, Exception{
//创建SOAP连接
SOAPConnectionFactory scf = SOAPConnectionFactory.newInstance();
SOAPConnection sc = scf.createConnection();
//发送SOAP消息到目的地,并返回一个消息
URL urlEndpoint = new URL(requestUrl);
SOAPMessage response = sc.call(message, urlEndpoint);
// *************************************************
response.setProperty(SOAPMessage.CHARACTER_SET_ENCODING, "utf-8");
// 打印服务端返回的soap报文供测试
System.out.println("Receive SOAP message:");
// 创建soap消息转换对象
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
// 提取消息内容
Source sourceContent = response.getSOAPPart().getContent();
// Set the output for the transformation
StreamResult result = new StreamResult(System.out);
transformer.transform(sourceContent, result);
// *************************************************
// 关闭连接
sc.close();
// *************************************************
/* 模拟客户端A,异常处理测试*/
SOAPBody ycBody = response.getSOAPBody();
Node ycResp = ycBody.getFirstChild();
System.out.print("returnValue:"+ycResp.getTextContent());
}
/**
* 发送SOAP请求
public void send1(String requestUrl,SOAPMessage request) {
//定义serviceName对应的QName,第一个参数是对应的namespace
QName serviceName = new QName("http://xxx.com/", "SOAPMessageService");
//定义portName对应的QName
QName portName = new QName("http://xxx.com/", "SOAPMessagePort");
//使用serviceName创建一个Service对象,该对象还不能直接跟WebService对象进行交互
Service service = Service.create(serviceName);
// //指定wsdl文件的位置
// URL wsdl = new URL("http://localhost:8080/test/jaxws/services/SOAPMessage?wsdl");
// Service service = Service.create(wsdl, serviceName);
//创建一个port,并指定WebService的地址,指定地址后我们就可以创建Dispatch了。
service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, requestUrl);
//创建一个Dispatch对象
Dispatch<SOAPMessage> dispatch = service.createDispatch(portName, SOAPMessage.class, Mode.MESSAGE);
//调用Dispatch的invoke方法,发送一个SOAPMessage请求,并返回一个SOAPMessage响应。
SOAPMessage response = dispatch.invoke(request);
System.out.println("服务端返回如下: ");
try {
response.writeTo(System.out);
} catch (Exception e) {}
}
*/
}
测试方法
public static void main(String[] args) throws SOAPException, Exception {
Map<String, String> params = new HashMap<String, String>();
params.put("a","1");
String string="http://xxx/xxx";
/** *************以下是SOAP请求***************** */
SoapSender sender = SoapSender.getInstance();
SOAPMessage message = sender.getMessage();
// SOAPMessage message = sender.getMessage(params);
// SOAPMessage message = sender.getMessage(null,"D:\\SOAPMessageResp.xml");
message.writeTo(System.out);
sender.send(string,message);
/** *************以下是HTTP请求***************** */
// HttpProtocolHandler httpProtocolHandler = HttpProtocolHandler.getInstance();;
// System.out.println(httpProtocolHandler.executePostReq(string, params));
// System.out.println(string);
// System.out.println(httpProtocolHandler.executeGetString(string));
}
标签:
原文地址:http://www.cnblogs.com/tongxinyuan/p/4484061.html