2

我为 JavaHelp 的文件编写了一个 XML 解析器,toc.xml以拦截我在tocitem标记中使用的一些被 JavaHelp 忽略的属性。如下toc.xml所示:

<?xml version='1.0' encoding='ISO-8859-1'  ?>

<!DOCTYPE toc
   PUBLIC "-//Sun Microsystems Inc.//DTD JavaHelp TOC Version 2.0//EN"
     "http://java.sun.com/products/javahelp/toc_2_0.dtd">
<toc version="2.0">
   <tocitem text="Introduction" target="intro" action="myapp.help.introAction"/>
</toc>

我正在toc.xml使用标准 SAX 解析器进行解析。解析文件时,出现以下异常:

myapp.help.TOCTreeFactory[WARN]: Failed to load TOC file from 'jar:file:/home/samad/myapp.jar!/workflow-help/toc.xml'

Caused by:
http://java.sun.com/javase/technologies/desktop/javahelp/toc_2_0.dtd
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDTDEntity(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.setInputSource(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at myapp.help.TOCTreeFactory.createTree(TOCTreeFactory.java:43)
...

我打开网址http://java.sun.com/javase/technologies/desktop/javahelp/toc_2_0.dtd,我得到一个 404。

我该如何解决这个问题?我尝试下载 JavaHelp 分发包,但它不包含toc_2_0.dtdSAX 所需的文件。

4

2 回答 2

1

您是否尝试过在工厂关闭验证?

SAXParserFactory pf = SAXParserFactory.newInstance();
pf.setValidating(false);

另一种选择...阻止您的 Java SAX 解析器下载 DTD

于 2010-09-13T21:31:30.183 回答
0

在寻找类似问题的解决方案时,我首先被引导到这个问题。该setValidating()方法对我也不起作用。 这个相关问题的回答将我引向了SAXParserFactorysetFeature()方法,该方法确实有效。

SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
于 2013-04-05T15:36:35.210 回答