无法捕获SAXParseException

时间:2012-04-16 08:47:20

标签: java rdf jena

您好我正在使用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)

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

  

异常org.xml.sax.SAXParseException永远不会在正文中抛出   相应的尝试声明

那我怎么能聊聊这个例外呢?我知道我只能抓住Exception但我不能确定问题出在哪里

3 个答案:

答案 0 :(得分:1)

SAXParserException是"已检查的例外"意味着方法签名被强制声明它,如果它抛出。显然,你调用的方法并没有声明它,所以你无法捕获它。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

如果您希望处理RDF XML输入的问题,可以使用error handler interface更直接地使用Jena读者。