【发布时间】:2012-06-22 07:13:19
【问题描述】:
我越来越奇怪“文件过早结束”。最近几天在我们的一台服务器上例外。 same 配置 XML 在另一台服务器上工作正常。我们在这两台服务器上都使用 Tomcat 5.0.28。这段代码已经工作了很长时间(7 年以上),只是在最近的服务器崩溃之后,我们在其中一台服务器上遇到了这个问题。 XML 和 Java 解析代码没有变化。 :(
我能看到的唯一区别是 Java 版本 -
问题服务器 java版本“1.6.0_16” Java(TM) SE 运行时环境 (build 1.6.0_16-b01) Java HotSpot(TM) 64 位服务器 VM(内部版本 14.2-b01,混合模式)
工作服务器 java版本“1.6.0_07” Java(TM) SE 运行时环境 (build 1.6.0_07-b06) Java HotSpot(TM) 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, - 马尼什
【问题讨论】:
-
1.
InputSource是如何构建的? 2.XML有多大? 3.XML是否来自本地文件,来自 URL、数据库、其他流式源 - 可能是套接字断开连接,或者InputStream在解析过程中关闭? -
您确定服务器崩溃时没有添加一些特殊字符吗?您可以尝试从您的一台工作服务器中输入 XML,看看它是否有效。
-
@npe - (1)
InputSource使用FileReader-this.readSource( new InputSource( fr ) );(2) XML 大小为 108.1 KB。现在已经有很长时间了。 (3) XML 来自本地文件系统。我还怀疑InputStream是否在两者之间关闭。我怎样才能检测到呢?再一次,想知道为什么它以前有效而不是现在 :( @npinti - 我使用了来自 SVN 的新 XML,并在 XML 验证器中尝试了相同的版本。它是有效的 XML。 -
@Manish:尝试在
FileReader#close()中设置一个断点,看看它是否被调用了。或者子类FileReader并添加一些日志记录 - 例如,您可以转储read()的字节以查看文件是否已完全读取,或者它在某处中断。 -
@Manish:另一个问题:
InputSource是重复使用的,还是总是从头开始创建的?
标签: java xml xml-parsing