Невозможно проанализировать JavaHelp toc.xml - PullRequest
2 голосов
/ 14 сентября 2010

Я написал парсер XML для файла toc.xml JavaHelp, чтобы перехватить некоторые атрибуты, которые я использую в теге 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)
...

Я открыл URL http://java.sun.com/javase/technologies/desktop/javahelp/toc_2_0.dtd и получил 404.

Как я могу решить эту проблему?Я попытался загрузить дистрибутив JavaHelp, но он не содержит файл toc_2_0.dtd, необходимый для SAX.

Ответы [ 2 ]

1 голос
/ 14 сентября 2010

Вы пытались отключить проверку на заводе?

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

Еще одна альтернатива ... Остановить анализатор Java SAX от загрузки DTD

0 голосов
/ 05 апреля 2013

При поиске решения аналогичной проблемы меня сначала направили на этот вопрос.Метод setValidating() у меня тоже не сработал. Этот ответ на связанный вопрос указал мне на SAXParserFactory * setFeature() метод , который действительно работал.*

...