ウィキペディアの改訂履歴を POJO にロードする必要があるため、JAXB を使用してウィキペダのデータ ダンプ (つまり、その個々のページ) を非整列化しています。問題は、テキスト ノードに、ウィキペディアの xml ダンプで定義されていないエンティティが含まれることがあることです。例: ° (`°' は、読み取る必要があるエンティティの完全なセットがわからないことを覚えておいてください。私の入力ファイルは 3tb なので、html がレンダリングできるすべてのものがそこにあると仮定しましょう。 )。
有効な xml ではないエンティティを処理するように JAXB を構成するにはどうすればよいですか?
以下は、未定義のエンティティーに遭遇したときに JAXB がスローする SAX 例外です。
Exception in thread "main" javax.xml.bind.UnmarshalException
- with linked exception:
[org.xml.sax.SAXParseException: The entity "deg" was referenced, but not declared.]
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.createUnmarshalException(AbstractUnmarshallerImpl.java:315)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.createUnmarshalException(UnmarshallerImpl.java:481)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:199)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:168)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:137)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:184)
at com.stottlerhenke.tools.wikiparse.WikipediaIO.readPage(WikipediaIO.java:73)
at com.stottlerhenke.tools.wikiparse.WikipediaIO.main(WikipediaIO.java:53)
Caused by: org.xml.sax.SAXParseException: The entity "deg" was referenced, but not declared.
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLScanner.reportFatalError(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEntityReference(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:195)
編集:その例外を引き起こした入力は、北極圏に関するウィキペディアの記事の完全な改訂履歴です。JAXB クラスの生成に使用される XSD は、http ://www.mediawiki.org/xml/export-0.3.xsd にあります。
編集:この問題の原因は、私の側のエラーでした。エンコードされたエンティティを適切に維持していない最初のエクストラクタを使用していました。ただし、誰かが私が抱えていると思っていた問題を抱えている場合は、これを回避する方法を見つけました。下記参照。