org.xml.sax.SAXParseException:\*有效\* XML 的文件过早结束

新手上路,请多包涵

我变得很奇怪“文件过早结束”。最近几天在我们的一台服务器上出现异常。 相同 的配置 XML 在另一台服务器上工作正常。我们在这两台服务器上都使用 Tomcat 5.0.28。这段代码已经工作了很长时间(7 年以上),只是在最近的服务器崩溃之后,我们在其中一台服务器上遇到了这个问题。 XML 和 Java 解析代码没有变化。 :(

我能看到的唯一区别是 Java 版本 -

问题服务器 java 版本“1.6.0_16”Java™ SE 运行时环境(构建 1.6.0_16-b01)Java HotSpot™ 64 位服务器 VM(构建 14.2-b01,混合模式)

工作服务器 java 版本“1.6.0_07”Java™ SE 运行时环境(构建 1.6.0_07-b06)Java HotSpot™ 64 位服务器 VM(构建 10.0-b23,混合模式)

这是已经工作了几年的 Java 代码 -

 private void readSource(final InputSource in ) {
    try {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.parse(in);
        Element elt = doc.getDocumentElement();

        this.readElement( elt );
    } catch ( Exception ex ) {
        ex.printStackTrace();
        throw new ConfigurationException( "Unable to parse configuration information", ex );
    }
}

这是例外。

 [Fatal Error] :-1:-1: Premature end of file.
org.xml.sax.SAXParseException: Premature end of file.
        at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
        at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
        at com.circus.core.Configuration.readSource(Configuration.java:706)

我已经尝试验证 XML 并且没有发现任何错误。知道我还能在哪里寻找可能的问题吗?

任何指针将不胜感激!

TIA,-马尼什

原文由 Manish 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 976
2 个回答

这已解决。问题出在别处。 cron 作业中的另一个代码是将 XML 截断为 0 长度文件。我已经处理好了。

原文由 Manish 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是 Java InputStream 的问题。一旦文件偏移位置计数器移动到文件末尾,读取流时。在使用相同的流进行后续读取时,您将收到此错误。因此,您必须再次关闭并重新打开流或调用 inputStream.reset() 将偏移量计数器重置为其初始位置。

原文由 dadob051 发布,翻译遵循 CC BY-SA 3.0 许可协议

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