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 宣言を削除すると、正常に動作します。しかし、このシナリオでは削除できません。このエラーを回避するにはどうすればよいですか? Eclipse Bug 252787は、キャッシュの問題である可能性を示唆していますが、プロキシの背後にいるわけではなく、DTD URL は有効です。何か案は?