我有两个方法,分别解析两段接收到的xml,我确定两个方法的参数request是不一样的。方法1可正确执行,方法2报错Stream closed。我把inputStream.close()和inputStream = null注释掉还是一样。
方法如下,
方法1:
public static Map<String, String> parseXml(HttpServletRequest request) throws Exception {
// 将解析结果存储在HashMap中
Map<String, String> map = new HashMap<String, String>();
// 从request中取得输入流
InputStream inputStream = request.getInputStream();
// 读取输入流
SAXReader reader = new SAXReader();
Document document = reader.read(inputStream);
...
// 释放资源
inputStream.close();
inputStream = null;
return map;
}
方法2:
public static void parseScanXml(HttpServletRequest request) throws Exception{
// 从request中取得输入流
InputStream inputStream = request.getInputStream();
// 读取输入流
SAXReader reader = new SAXReader();
Document document = reader.read(inputStream);
// 得到xml根元素
Element root = document.getRootElement();
...
inputStream.close();
inputStream = null;
}
request 的 inputstream只能被读取一次。
你这是在什么环境下用的?
struts2? spring mvc? servlet?
要在框架的合适位置中处理。
而且 http是基于TCP的,有数据分片问题,最好是先全部读出,确认读完整之后再发给
SAX读取器,否则可能会因为未读完整导致处理失败。