1

嗨,我正在使用 jena 读取 som rdf 文件:

    InputStream in = FileManager.get().open(adress);
    model.read(in, adress);

第二行有时会抛出 SAXParseException 的问题:

org.xml.sax.SAXParseException: Element or attribute do not match QName production: QName::=(NCName':')?NCName. 
com.hp.hpl.jena.shared.JenaException: org.xml.sax.SAXParseException: Element or attribute do not match QName production: QName::=(NCName':')?NCName. 
    at com.hp.hpl.jena.rdf.model.impl.RDFDefaultErrorHandler.fatalError(RDFDefaultErrorHandler.java:45)
    at com.hp.hpl.jena.rdf.arp.impl.ARPSaxErrorHandler.fatalError(ARPSaxErrorHandler.java:35)
    at com.hp.hpl.jena.rdf.arp.impl.XMLHandler.warning(XMLHandler.java:225)
    at com.hp.hpl.jena.rdf.arp.impl.XMLHandler.fatalError(XMLHandler.java:255)
    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.XMLEntityScanner.scanQName(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(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.DTDConfiguration.parse(Unknown Source)
    at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    at com.hp.hpl.jena.rdf.arp.impl.RDFXMLParser.parse(RDFXMLParser.java:142)
    at com.hp.hpl.jena.rdf.arp.JenaReader.read(JenaReader.java:158)
    at com.hp.hpl.jena.rdf.arp.JenaReader.read(JenaReader.java:145)
    at com.hp.hpl.jena.rdf.arp.JenaReader.read(JenaReader.java:215)
    at com.hp.hpl.jena.rdf.model.impl.ModelCom.read(ModelCom.java:197)

所以我想做一些尝试捕获块。问题是当我这样做时,编译器返回:

异常 org.xml.sax.SAXParseException 永远不会在相应的 try 语句的主体中抛出

那么我怎么能聊到这个异常呢?我知道我可以只捕获异常,但我不能确定问题发生在哪里

4

3 回答 3

1

SAXParserException 是一个“检查异常”,这意味着如果方法签名抛出,则强制声明它。显然,您调用的方法没有声明它,因此您无法捕获它。

看起来 Jena 实际上是将该异常包装在“未经检查的异常”中(即扩展 RuntimeException 的异常)。这个例外其实是JenaException。因此,您可以为 a 添加一个 try/catch JenaException,然后使用它getCause()来查找 Jena 遇到的原始错误。

于 2012-04-16T08:55:03.307 回答
1

您应该捕获 JenaException 而不是 SAXParseException。然后尝试找出可能是 SAXParseException 的原因。

于 2012-04-16T08:57:14.233 回答
0

如果您希望处理 RDF XML 输入的问题,有一种更直接的方法是使用Jena 阅读器的错误处理程序接口。

于 2012-04-16T21:54:48.837 回答