创建期间如何在apache.jena.queryExecutionFactory上调试NullPointerException?

时间:2019-02-27 12:10:36

标签: java nullpointerexception jena karaf

我正在与karafNullPointerException一起工作。尝试查询模型时,我得到了queryString并打印了用于创建查询的所有变量,而所有变量(inferedModelnull)都不是Model model = JenaEngine.readModel(inputDataOntology); if (model == null) { return "model null !"; } Model inferedModel = JenaEngine.readInferencedModelFromRuleFile(model, inputRule); if (inferedModel == null) { return "inferedModel null !"; } JenaEngine.updateValueOfDataTypeProperty(inferedModel, ns, "Peter", "age", 10); JenaEngine.updateValueOfObjectProperty(inferedModel, ns, "Peter", "estFilsDe", "Femme1"); JenaEngine.createInstanceOfClass(model, ns, "Femme", "abc"); //query on the model String prefixQuery = "PREFIX ns: <http://www.owl-ontologies.com/Ontology1291196007.owl#>\n" + "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" + "PREFIX owl: <http://www.w3.org/2002/07/owl#>\n"+ "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n"; String selectQuery = "SELECT ?user ?age WHERE {\n ?user ns:age ?age.\n }"; QueryExecution queryExecution = QueryExecutionFactory.create(prefixQuery+selectQuery, inferedModel); ResultSet rs = queryExecution.execSelect(); List<String> users = new ArrayList(); while(rs.hasNext()) { QuerySolution qs = rs.next(); Resource user = qs.getResource("user"); users.add(user.getLocalName()); } String results = ""; for(String user : users) { results+=user+" "; } return results; 。 这是我的代码:

NullPointerException

我在初始化QueryExecution变量的那一行得到了java.lang.NullPointerException at org.apache.jena.query.ARQ.isTrue(ARQ.java:650) at org.apache.jena.sparql.lang.ParserBase.<init>(ParserBase.java:292) at org.apache.jena.sparql.lang.SPARQLParserBase.<init>(SPARQLParserBase.java:43) at org.apache.jena.sparql.lang.sparql_11.SPARQLParser11Base.<init>(SPARQLParser11Base.java:22) at org.apache.jena.sparql.lang.sparql_11.SPARQLParser11.<init>(SPARQLParser11.java:4974) at org.apache.jena.sparql.lang.ParserSPARQL11.perform(ParserSPARQL11.java:91) at org.apache.jena.sparql.lang.ParserSPARQL11.parse$(ParserSPARQL11.java:52) at org.apache.jena.sparql.lang.SPARQLParser.parse(SPARQLParser.java:34) at org.apache.jena.query.QueryFactory.parse(QueryFactory.java:147) at org.apache.jena.query.QueryFactory.create(QueryFactory.java:79) at org.apache.jena.query.QueryFactory.create(QueryFactory.java:52) at org.apache.jena.query.QueryFactory.create(QueryFactory.java:40) at fr.conceptit.tuto.web.Main.work(Main.java:71) ...

这是错误的堆栈跟踪:

function requestAPI(method, url, token = null, json = null, callback = null) {
  const rawFile = new XMLHttpRequest();
  rawFile.overrideMimeType('application/json');
  rawFile.open(method, url, true);
  if (token != null) {
    rawFile.setRequestHeader('Authorization', `Token ${token}`);
  }
  rawFile.setRequestHeader('Content-type', 'application/json; charset=utf-8;');
  rawFile.onreadystatechange = () => {
    if (rawFile.readyState === 4) {
      console.log(rawFile);
      callback(rawFile);
    }
  };
  rawFile.send(JSON.stringify(json));
}

我正在通过Karaf部署我的应用程序,也许问题出在那儿。这是我在Karaf上的捆绑包列表的屏幕截图。请注意,我添加了所有的耶拿Jars。Karaf Bundles list

1 个答案:

答案 0 :(得分:0)

由于@AndyS的评论,我得以找到一种使之工作的方法。他朝正确的方向说:

  

ARQ.isTrue上的NPE:ARQ未正确初始化

确实是问题所在,我通过初始化ARQ而不是他建议的JenaSystem来解决了这个问题。基本上,我在没有任何对org.apache.jena.query.ARQ.init()的调用之前添加了Jena并成功了。 再次感谢您的帮助和支持。