Servlets 初始化StAX解析引擎时失败

Servlets 初始化StAX解析引擎时失败,servlets,jena,semantic-web,dbpedia,endpoints,Servlets,Jena,Semantic Web,Dbpedia,Endpoints,我是语义网的新手。我正在尝试做一个简单的webapp,它使用dbpediasparql中的信息来显示确定位置的信息 这是我的密码: String adicional = "NO_INFO_DBPEDIA_DATA"; if(propiedad.equals("http://dbpedia.org/ontology/location")){ municipio = propiedadObtenida.substring(8, propiedadObtenida.length

我是语义网的新手。我正在尝试做一个简单的webapp,它使用dbpediasparql中的信息来显示确定位置的信息

这是我的密码:

String adicional = "NO_INFO_DBPEDIA_DATA";
    if(propiedad.equals("http://dbpedia.org/ontology/location")){
        municipio = propiedadObtenida.substring(8, propiedadObtenida.length()-3);
        Query query_municipio = QueryFactory
                .create("select ?z  where {<"
                        + "http://dbpedia.org/resource/" + municipio 
                        + "> <http://dbpedia.org/ontology/abstract> ?z.FILTER (LANG(?z)='es')}");
        QueryExecution query_exec_municipio = QueryExecutionFactory.sparqlService(
                DBPEDIA_ENDPOINT, query_municipio);
        ResultSet results_municipio = query_exec_municipio.execSelect();

        System.out.println(query_municipio.toString());

        while (results_municipio.hasNext())
            adicional = results_municipio.next().toString();

    }       
String adicional=“NO\u INFO\u DBPEDIA\u DATA”;
如果(propiedad.equals)http://dbpedia.org/ontology/location")){
市政=propiedadObtenida.substring(8,propiedadObtenida.length()-3);
查询城市=查询工厂
.create(“选择z,其中{z.FILTER(LANG(?z)='es'))”;
QueryExecution query\u exec\u municipio=QueryExecutionFactory.sparqlService(
DBPEDIA_端点,查询_市政);
ResultSet results_municipio=query_exec_municipio.execSelect();
System.out.println(query_municipio.toString());
while(results\u municipio.hasNext())
adicional=results_municipio.next().toString();
}       
我检查我要查找的属性是否是位置,然后查询dbpedia端点sparql()。但当执行显示下一个错误的结果集时,程序失败:

GRAVE: Servlet.service() para servlet QueryServlet lanzó excepción
com.hp.hpl.jena.sparql.resultset.ResultSetException: Failed when initializing the StAX parsing engine
at com.hp.hpl.jena.sparql.resultset.XMLInputStAX.<init>(XMLInputStAX.java:110)
at com.hp.hpl.jena.sparql.resultset.XMLInput.make(XMLInput.java:73)
at com.hp.hpl.jena.sparql.resultset.XMLInput.fromXML(XMLInput.java:42)
at com.hp.hpl.jena.sparql.resultset.XMLInput.fromXML(XMLInput.java:37)
at com.hp.hpl.jena.query.ResultSetFactory.fromXML(ResultSetFactory.java:311)
at com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execSelect(QueryEngineHTTP.java:371)
at org.ws1415.euskadi.restaurantes.servlet.QueryServlet.doGet(QueryServlet.java:89)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
at com.sun.org.apache.xerces.internal.impl.XML11NSDocumentScannerImpl.scanStartElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XML11NSDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(Unknown Source)
at com.hp.hpl.jena.sparql.resultset.XMLInputStAX$ResultSetStAX.processHead(XMLInputStAX.java:365)
at com.hp.hpl.jena.sparql.resultset.XMLInputStAX$ResultSetStAX.init(XMLInputStAX.java:183)
at com.hp.hpl.jena.sparql.resultset.XMLInputStAX$ResultSetStAX.<init>(XMLInputStAX.java:175)
at com.hp.hpl.jena.sparql.resultset.XMLInputStAX.worker(XMLInputStAX.java:135)
at com.hp.hpl.jena.sparql.resultset.XMLInputStAX.<init>(XMLInputStAX.java:106)
... 28 more
GRAVE:Servlet.service()para Servlet QueryServlet lanzóexcepción
com.hp.hpl.jena.sparql.resultset.ResultSetException:初始化StAX解析引擎时失败
位于com.hp.hpl.jena.sparql.resultset.XMLInputStAX.(XMLInputStAX.java:110)
位于com.hp.hpl.jena.sparql.resultset.XMLInput.make(XMLInput.java:73)
位于com.hp.hpl.jena.sparql.resultset.XMLInput.fromXML(XMLInput.java:42)
位于com.hp.hpl.jena.sparql.resultset.XMLInput.fromXML(XMLInput.java:37)
位于com.hp.hpl.jena.query.ResultSetFactory.fromXML(ResultSetFactory.java:311)
位于com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execSelect(QueryEngineHTTP.java:371)
位于org.ws1415.euskadi.restaurants.servlet.QueryServlet.doGet(QueryServlet.java:89)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
位于org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
位于org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
位于org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
位于org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
位于org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
位于org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
位于org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
位于org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
位于org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
位于org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
位于org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620)
位于org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(未知源)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(未知源)
位于org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
位于java.lang.Thread.run(未知源)
原因:java.lang.NullPointerException
在com.sun.org.apache.xerces.internal.impl.XML11NSDocumentScannerImpl.scanStartElement(未知来源)
位于com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(未知源)
在com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(未知来源)
在com.sun.org.apache.xerces.internal.impl.XML11NSDocumentScannerImpl.next(未知源)
在com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(未知来源)
位于com.hp.hpl.jena.sparql.resultset.XMLInputStAX$resultsetsax.processHead(XMLInputStAX.java:365)
位于com.hp.hpl.jena.sparql.resultset.XMLInputStAX$resultsetsax.init(XMLInputStAX.java:183)
在com.hp.hpl.jena.sparql.resultset.XMLInputStAX$resultsetsax.(XMLInputStAX.java:175)
位于com.hp.hpl.jena.sparql.resultset.XMLInputStAX.worker(XMLInputStAX.java:135)
位于com.hp.hpl.jena.sparql.resultset.XMLInputStAX(XMLInputStAX.java:106)
... 28多

有人能帮我吗?谢谢

多亏了Jena邮件列表,我找到了以下快速解决方法:

    QueryEngineHTTP qexec = (QueryEngineHTTP) QueryExecutionFactory.sparqlService(uri, query);
    try {
        Thread.sleep(100);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    try {
        qexec.setSelectContentType(WebContent.contentTypeResultsJSON);
        ResultSet results = qexec.execSelect();
        return results;
    } finally {

    }
我没有使用QueryExecution类,而是使用QueryEngineHTTP类并设置了不同的内容类型(本例中为JSON)


我希望这会有所帮助。

这似乎与DBPedia最近更改使用XML 1.1有关,Jena用于解析XML数据的Xerces库无法正确处理XML 1.1,请看这是一个错误。若要添加到@RobV的注释中,将收集解决此问题的可能方法。如果可以修改应用程序代码,更简单的方法是切换到SAX解析:
SystemARQ.UseSAX=true