2012-04-16 22 views
2

嗨,我使用耶拿閱讀索姆RDF文件:無法趕上的SAXParseException

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) 

,所以我想做一些try catch塊。問題是,當我這樣做,編譯器返回:

例外org.xml.sax.SAXParseException從未在 身體拋出相應try語句

所以,我怎麼能chatch此異常?我知道我可以趕上例外,但我不能確定問題發生在哪裏

回答

2

SAXParserException是一個「checked-exception」,意思是方法簽名被強制聲明它,如果它拋出。顯然,你調用的方法沒有聲明它,所以你不能捕捉它。

看起來Jena實際上是將這個異常包裝在一個「unchecked-exception」(即擴展了RuntimeException的異常)中。這個例外實際上是JenaException。因此,您可以爲JenaException添加try/catch,然後使用getCause()查找Jena遇到的原始錯誤。

1

您應該捕獲JenaException而不是SAXParseException。然後嘗試獲取可能是SAXParseException的原因。

0

如果您正在尋找處理RDF XML輸入問題的方法,那麼使用Jena閱讀器的error handler interface更直接。