使用DocumentBuilder解析本地XML文件会引发SocketException(连接重置)有时在Java中

时间:2015-03-15 13:33:29

标签: java xml file parsing socketexception

我在这里看过一些类似的帖子并尝试修改他们对这个问题的处理方法,但到目前为止,没有任何内容直接解决了我的确切问题。

所以我有一些需要在xml文件中读取的代码。我使用java.xml.parsers类(主要是文档构建器)在java中实现它。

相关代码如下:

public NodeList setupXmlFile(File xmlFile) {
    xmlToParse = xmlFile;
    DocumentBuilder builder;
    Document toRead;
    try {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        dbf.setValidating(false);
        builder = dbf.newDocumentBuilder();
        toRead = builder.parse(xmlToParse);
    } catch (ParserConfigurationException | SAXException | IOException e) {
        if (Main.LOGGING) {
            System.out.println("ERROR: Couldn't open the xml file to read. Possibly an incorrect name.");
            e.printStackTrace();
        }
        return null;
    }       

    return toRead.getChildNodes();
}

我传入的是一个以前从本地路径构建的实际文件(在服务器或本地计算机上)。该文件始终存在,从未上传或修改或任何奇怪的。 xmlToParse是全局的,所以这里没有定义。

奇怪的是,我完全工作并在网站上生活了大约一个月,并产生了结果。现在看似没有任何变化,网站版本和本地版本都不会读取文件。我似乎无法确定原因。

以下是我得到的确切例外:

java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:189)
at java.net.SocketInputStream.read(SocketInputStream.java:121)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:703)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:647)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:674)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1535)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1440)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:646)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1300)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDTDEntity(XMLEntityManager.java:1267)
at com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.setInputSource(XMLDTDScannerImpl.java:263)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(XMLDocumentScannerImpl.java:1164)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(XMLDocumentScannerImpl.java:1050)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:964)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:348)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:205)
at Visitors.NoteComplexityVisitor.setupXmlFile(NoteComplexityVisitor.java:169)
at Visitors.NoteComplexityVisitor.<init>(NoteComplexityVisitor.java:104)
at Main.Scorer.<init>(Scorer.java:39)
at Main.Main.main(Main.java:61)

我希望尽可能远离套接字,因为我只处理本地文件而且从不流式传输/上传任何内容。我已经通过将确切路径复制到终端并转到它来验证文件确实存在。当我将该文件路径格式化时,我得到了一个不同的异常,因为该文件不正确,所以我似乎已经消除了这种可能性。再一次,我似乎无法理解为什么两个版本突然停止工作。我可以验证我的github仓库中没有任何变化,所以我不会错过任何简单的我不认为(至少我希望)。请帮助,非常感谢你!

0 个答案:

没有答案