提前結束文件我越來越奇怪「文件過早結束」。在我們的一臺服務器上的最後幾天例外。 相同配置XML在另一臺服務器上正常工作。我們在這兩臺服務器上都使用Tomcat 5.0.28。這個代碼一直在工作多年(7歲以上),只有在最近的服務器崩潰之後,我們才面對一個服務器上的這個問題。 XML和Java解析代碼都沒有改變。 :(org.xml.sax.SAXParseException:* VALID * XML
我能看到的唯一區別是Java版本 -
問題的服務器 Java版本 「1.6.0_16」 的Java(TM)SE運行時環境(建立1.6.0_16-B01) Java的熱點(TM)64位服務器VM(建14.2-B01,混合模式)
工作服務器 Java版本 「1.6.0_07」 的Java(TM)SE運行環境(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在解析過程中被關閉? – npe
你確定當服務器崩潰時它沒有添加一些特殊字符?你可以嘗試從你的一臺工作服務器中讀入XML,看看它是否有效。 – npinti
@npe - (1)'InputSource'是建立與'FileReader' - 'this.readSource(新的InputSource(FR));' (2)XML是108.1 2KB大小。現在已經有這麼長時間了。 (3)XML來自本地文件系統。 我也懷疑'InputStream'是否在兩者之間關閉。我如何檢測?再次,想知道爲什麼它的工作之前,而不是現在:( @npinti - 我用SVN的新鮮的XML,並嘗試在XML驗證相同的版本,它*是*有效的XML – Manish