访问查询结果时出现意外的NullPointerException

时间:2013-10-13 15:13:19

标签: java nullpointerexception sparql jena dbpedia

我有这段代码而且我不明白为什么我会收到NullPointerException:

public static ArrayList<String> retrieveObject(String istance,String property){
    String sparqlQueryString= "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-   syntax-ns#> "+
        "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> "+
        "PREFIX dbpedia: <http://dbpedia.org/resource/> "+
        "PREFIX o: <http://dbpedia.org/ontology/> "+
        "PREFIX dbprop: <http://dbpedia.org/property/>"+
        "PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>" +
        "select ?c"+
        "where {<"+istance+"> "+property+" ?c.}";
    ArrayList<String> array = new ArrayList<String>();
    Query query = QueryFactory.create(sparqlQueryString);
    QueryExecution qexec = QueryExecutionFactory.sparqlService("http://dbpedia.org/sparql", query);
    ResultSet res = qexec.execSelect();
    for(; res.hasNext();) {
        QuerySolution soln = res.nextSolution();
        for(int i=0;i<query.getProjectVars().size();i++){
            array.add(soln.get(query.getProjectVars().get(i).getVarName()).asResource().toString());   
        }

    }
    return array;
} 

我用这种方式调用方法:

System.out.println(retrieveObject("http://dbpedia.org/resource/Immanuel_Kant","o:deathPlace"));

1 个答案:

答案 0 :(得分:0)

  

我在此行有Null指针异常:   array.add(soln.get(query.getProjectVars()得到(ⅰ).getVarName())asResource()TOST环()。);

将表达式分开以找到NPE - 一种可能性是它不是URI,因此asResource是错误的。

更好的可能是

   for(String var : query.getResultVars() {
        Resource r = soln.getResource(var) ;
        array.add(r.getURI()) ;
   }

(注意空白节点)