Stream closed异常

我有两个方法,分别解析两段接收到的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;
          
    }
阅读 10.8k
2 个回答

request 的 inputstream只能被读取一次。
你这是在什么环境下用的?
struts2? spring mvc? servlet?
要在框架的合适位置中处理。

而且 http是基于TCP的,有数据分片问题,最好是先全部读出,确认读完整之后再发给
SAX读取器,否则可能会因为未读完整导致处理失败。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题