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方法类似。

使用HttpClient进行http post/get方法的调用,以及使用dom4j解析xml的更多相关文章

  1. java dom4j解析xml用到的几个方法

    1. 读取并解析XML文档: SAXReader reader = new SAXReader(); Document document = reader.read(new File(fileName ...

  2. 四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)

    众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...

  3. 解析XML的方法

    解析XML的方法 1.DOM生成和解析XML 2.SAX生成和解析XML 3.DOM4J生成和解析XML 4.JDOM生成和解析XML

  4. 四种生成和解析XML文档的方法详解

    众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...

  5. java解析XML文件四种方法之引入源文件

    1.DOM解析(官方) try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();         Documen ...

  6. 大杂烩 -- 四种生成和解析XML文档的方法详解

    基础大杂烩 -- 目录 众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J DOM:在现在的Java JDK里都自带了,在xml-apis.jar包 ...

  7. 使用HttpClient 发送get、post请求,及其解析xml返回数据

    一.关于HttpClient的使用: 可以参考这个博客地址,这里有详细的介绍,需要的可以先看一下: 地址是:http://blog.csdn.net/wangpeng047/article/detai ...

  8. Android DOM解析XML方法及优化

    在Android应用开发中,我们常常要在应用启动后从服务器下载一些配置文件,这些配置文件包含一些项目中可能用到的资源,这些文件很多情况下是XML文件,这时就要将XML下载到文件中保存,之后再解析XML ...

  9. UIView的layoutSubviews和drawRect方法何时调用

    首先两个方法都是异步执行.layoutSubviews方便数据计算,drawRect方便视图重绘. layoutSubviews在以下情况下会被调用: 1.init初始化不会触发layoutSubvi ...

随机推荐

  1. 2D多边形碰撞器优化器

    http://www.unity蛮牛.com/thread-19827-1-1.html http://pan.baidu.com/s/1qW2mWS8 Asset Store Link: http: ...

  2. SDUT 1570 C 旅行(DFS)

    点我看题目 题意 : 中文不详述. 思路 :就是DFS一下,只要到达终点条数就加1,然后再注意一下方向,因为我就是没注意方向WA了,只能向上向右走,x是行,所以向上是x-1,向右是y+1,因为我没弄好 ...

  3. activity的测试工程activiti-explorer使用

    1. activiti-explorer默认使用h2数据库,第一步要修改db.properties的配置,如果使用其他数据库的话,务必放入驱动包,oracle的ojdbc4不能用,会报错,要使用版本高 ...

  4. Android USB Host 与 Hid 设备通信bulkTransfer()返回-1问题的原因

    近期一直在做Android USB Host 与USB Hid设备(STM32FXXX)的通信,遇到了很多问题.项目源码以及所遇到的其他问题可以见本博客其他相关文章,这里重点讲一下bulkTransf ...

  5. SQL语句优化方法

    1.1 注释使用 在语句中多写注释,注释不影响SQL语句的执行效率.增加代码的可读性. 1.2 对于事务的使用 尽量使事务处理达到最短,如果事务太长最好按功能将事务分开执行(如:可以让用户在界面上多几 ...

  6. Azure Site Recovery 通过一键式流程将虚拟机故障转移至 Azure虚拟机

    Ruturaj Dhekane 云 + Enterprise 项目经理  现在,AzureSite Recovery可以通过其"灾难恢复至 Azure"功能保护您的工作负荷,并 ...

  7. 【转】Android学习系列(1)--为App签名(为apk签名)

    原文网址:http://www.cnblogs.com/qianxudetianxia/archive/2011/04/09/2010468.html 写博客是一种快乐,前提是你有所写,与人分享,是另 ...

  8. 部署解决方案包 (SharePoint Server 2010)

    转:http://technet.microsoft.com/zh-cn/library/cc262995(v=office.14).aspx 本文介绍各个解决方案包,及其在 Microsoft Sh ...

  9. Android中TextView输入字数统计和限制

    在Android开发应用的时候,文本编辑框中最多输入140个字,经常会显示还剩多少字以限制用户输入的字数, EditText content;//定义一个文本输入框 TextView hasnum;/ ...

  10. 如何使一个网络下的2台路由器都可以dhcp上网

    设备:2台路由器,网线若干 首先,设置好一个路由器,让它可以拨号上网.网关设置为192.168.1.1,子网掩码为255.255.255.0,dns为61.177.7.1 然后,设置第二台路由器.设置 ...