嗨,我正在使用耶拿读取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语句


那么,如何才能处理此异常?我知道我只能捕捉到异常,但是我不能确定问题出在哪里

最佳答案

SAXParserException是一个“ checked-exception”,这意味着方法签名被强制声明(如果抛出)。显然,您调用的方法没有声明它,因此您无法捕获它。

看起来Jena实际上是将该异常包装在“ unchecked-exception”中(即,扩展RuntimeException的异常)。该例外实际上是JenaException。因此,您可以为JenaException添加一个try / catch,然后使用getCause()来查找由Jena带来的原始错误。

10-04 11:07