2012-04-16 55 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更直接。