使用HttpClient进行http post/get方法的调用,以及使用dom4j解析xml

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.commons.io.IOUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.eecn.warehouse.api.model.Address;
import com.eecn.warehouse.api.model.User;
import com.eecn.warehouse.utils.FoodBase;
import com.frogsing.common.api.open.storage.hy.TCustomer;
import com.frogsing.common.open.tools.xmlUtils;
import com.google.common.collect.Lists;
import com.thoughtworks.xstream.XStream;

@Controller
@RequestMapping(value = {"/api"})
public class ApiAction {
	private static Logger logger = LoggerFactory.getLogger(ApiAction.class);
	public static final String SERVER_URL = "http://192.168.1.100/api/StorageApi";
	
	@RequestMapping(value = {"/StorageApi"}, method = RequestMethod.POST)
	public String storageApi(TCustomer model, HttpServletRequest request, HttpServletResponse response) throws DocumentException {
		String xml = request.getParameter("xml");
		String signature = request.getParameter("signature");
		//************************http client*******************//
		PostMethod postMethod = null;
		try {
			// 构造HttpClient的实例
			HttpClient httpClient = new HttpClient();
			// 设置连接超时
			httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(10000);
			// 设置字符集
			httpClient.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");
			// 创建POST方法的实例
			postMethod = new PostMethod(SERVER_URL);
			// 使用系统提供的默认的恢复策略 该策略在碰到IO异常的时候将自动重试3次。
			postMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 20000);
			// 异常时,重试处理器
			postMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());

			//参数
			NameValuePair[] nameValuePairs = new NameValuePair[2];
			nameValuePairs[0] = new NameValuePair("xml", xml);
			nameValuePairs[1] = new NameValuePair("signature", signature);

			// 将参数加入到请求方法中
			postMethod.setRequestBody(nameValuePairs);
			// 发送连接
			int statusCode = httpClient.executeMethod(postMethod);

			if (statusCode == HttpStatus.SC_OK) {

				String result = postMethod.getResponseBodyAsString();
				logger.info("返回数据1:" + result);
				logger.info("字符集:" + postMethod.getResponseCharSet());
				String rspXml = new String(postMethod.getResponseBody(), "UTF-8");
				logger.info("返回数据2:" + rspXml);

				Document document = DocumentHelper.parseText(rspXml);
				
				Element signatureNode = (Element)document.selectSingleNode("//signature");
				Element dataNode = (Element)document.selectSingleNode("//data");
				
				String signXml = signatureNode.getText();
				String dataXml = dataNode.getText();
				
				String pureXml = FoodBase.decodeXml(dataXml);
				
				request.setAttribute("pureXml", pureXml);
				request.setAttribute("signXml", signXml);
			}
		} catch (Exception e) {
			logger.error("http client invoke error.", e);
		} finally {
			if (postMethod != null) {
				postMethod.releaseConnection();
			}
		}
		
		
		//******************************************************//
		ServletInputStream inputStream = null;
		String rspXml = null;
		try {
			inputStream = request.getInputStream();
			rspXml = IOUtils.toString(inputStream, "UTF-8");
		} catch (IOException e) {
			logger.error("读取交易仓单返回数据错误.", e);
		}
		
		return "api/storage";
	}
	
	@RequestMapping(value = {"/MarketApi"}, method = RequestMethod.POST)
	public String marketApi(HttpServletRequest request, HttpServletResponse response) {
		
		return "api/market";
	}
	
	public static void main(String[] args) {
		XStream xstream = new XStream();
		xstream.alias("User", User.class);
		xstream.alias("Address", Address.class);
		
		//xStream.aliasAttribute(User.class, "name", "name");
		xstream.useAttributeFor(User.class, "name");
		
		
		List<Address> addressList = Lists.newArrayList();
		for (int i = 0; i < 3; i++) {
			Address address = new Address();
			address.setProvince("浙江");
			addressList.add(address);
		}
		User user = new User();
		user.setAddressList(addressList);
		
		user.setAccount("asddaa");
		user.setAge(23);
		user.setGender(0);
		user.setName("zhang");
		
		System.out.println(xstream.toXML(user));
		
		System.out.println(xmlUtils.toEntityXml(user));
	}
}
get方法类似。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值