Xml SAXParseException:解析doctype时文件过早结束

Xml SAXParseException:解析doctype时文件过早结束,xml,xml-parsing,sax,doctype,Xml,Xml Parsing,Sax,Doctype,我正在尝试使用Java XML API将XML文档从文件加载到文档中: DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(source); 但是,对于特定的输入文档,我得到了以下异常: org.xml.sax.SAXParseException: Premature en

我正在尝试使用Java XML API将XML文档从文件加载到文档中:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(source);
但是,对于特定的输入文档,我得到了以下异常:

org.xml.sax.SAXParseException: Premature end of file.
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
    ...
System.err日志提到问题出现在位置
:3:1
,在本XML文档中,该位置是doctype声明:

<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE web-app PUBLIC
  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
  ...

...

如果我删除doctype声明,它可以正常工作。但在这种情况下,我无法删除它。我如何避免这个错误?这可能是缓存问题,但我不支持代理,DTD URL是有效的。有什么想法吗?

没有关闭标记结果是我检查了错误的文件,它根本没有任何根元素。要提供帮助,请尝试设置
DocumentBuilderFactory.setValidating(true)
没有结束标记。)嗯,是的,原因是错误的:(通常与我相反。:D