我在使用 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 文件末尾有一个新行。
最佳答案
当您执行 IOUtils.copy(bais, new FileOutputStream(myFile));
时,您已经“耗尽”了 bais
。您已将 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/