在jena中运行sparql查询时出现java.lang.InstantiationError

时间:2012-08-20 11:15:29

标签: java java-ee rdf sparql jena

亲爱的朋友我使用带有virtuoso的RDF数据库模型的Jena框架 在我的项目中。我的jena版本是jena-core2.7.2和jena-arq-2.9.2

这是我的代码,它给了我错误

public JsonArray getCountryAutoSuggestData()
{
    JsonArray countryArray = new JsonArray();
    Model model = DataModel.getModel();
    String mystr = " PREFIX plcontologyurl:<http://www.plcontology.com/#> "
            + " PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
            + "select ?cn"
            + " where "
            + " { "
            + " ?d plcontologyurl:Country_Name ?cn . "
            + "}";
    Query query = QueryFactory.create(mystr);
    QueryExecution qe = QueryExecutionFactory.create(query, model);
    QuerySolutionMap qMap = new QuerySolutionMap();
    qe.setInitialBinding(qMap);
    ResultSet rs = qe.execSelect();
    while(rs.hasNext())
    {
        qMap = (QuerySolutionMap)rs.next();
        countryArray.add(new JsonPrimitive(qMap.getLiteral("cn").getString()));
    }
    return countryArray;
}

错误是java.lang.InstantiationError:com.hp.hpl.jena.sparql.engine.binding.BindingMap  在线 而(rs.hasNext())

我尝试寻找问题,然后找到一个relevant discussion

他们说现在com.hp.hpl.jena.sparql.engine.binding.BindingMap并不简单 现在这个版本的类,但现在是一个界面。

如果是那样那么如何在当前版本中运行sparql查询。 请根据我分享的代码举例说明。 提前谢谢。

1 个答案:

答案 0 :(得分:4)

您在类路径上有各种版本。

您链接的信息是正确的 - BindingMap成为一个接口,因此如果您看到java.lang.InstantiationError,则表示调用代码来自早期版本的ARQ。

检查类路径上没有多个Jena代码副本,并且JVM的endorsed目录中没有副本。