您好我正在使用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但我不能确定问题出在哪里
答案 0 :(得分:1)
SAXParserException是"已检查的例外"意味着方法签名被强制声明它,如果它抛出。显然,你调用的方法并没有声明它,所以你无法捕获它。
看起来Jena实际上是在"未经检查的异常"中包装该异常。 (即,扩展RuntimeException的异常)。这个例外实际上是JenaException
。因此,您可以为JenaException
添加try / catch,然后使用getCause()
查找Jena遇到的原始错误。
答案 1 :(得分:1)
您应该捕获JenaException而不是SAXParseException。然后尝试获取可能是SAXParseException的原因。
答案 2 :(得分:0)
如果您希望处理RDF XML输入的问题,可以使用error handler interface更直接地使用Jena读者。