使用 JDOM 的 SAXBuilder 的 build 方法读取 InputStream 时出现异常:

InputStream bais = p_sendXML.getXml().getInputStream();
File myFile = new File(System.getProperty("java.io.tmpdir"), PREFIX+p_sendXML.getSessionId()+".xml");
IOUtils.copy(bais, new FileOutputStream(myFile));
LOGGER.debug("File save in: "+myFile.getAbsolutePath());
SAXBuilder builder = new SAXBuilder();
Document xmlDoc = builder.build(bais);

文件被正确创建并且里面的 XML 是有效的,所以我不应该得到这个异常。如果您想知道,在 XML 文件的末尾有一个新行。

最佳答案

当您执行 bais 时,您已经“耗尽”了 IOUtils.copy(bais, new FileOutputStream(myFile)); 。您已将 bais 的内容复制到文件中,现在 bais 为“空”。您需要:

  • 以某种方式获取 bais 的副本,然后再将其写入磁盘
  • 直接通过 JDOM 解析并使用 JDOM 将 XML 写入磁盘 ( XMLOutputter )
  • 获取 JDOM 来解析文件(不是 bais )。
  • 关于java - JDOMParseException : Error on line -1: Premature end of file,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22909734/

    10-10 14:26