Как отладить исключение NullPointerException в apache.jena.queryExecutionFactory во время создания? - PullRequest
0 голосов
/ 27 февраля 2019

Я работаю с org.apache.jena с karaf.При попытке запросить мою модель я получаю NullPointerException Я напечатал все переменные, которые я использую для создания запроса, и все (queryString, inferedModel) не null.Вот как выглядит мой код:

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)
        ...

Я развертываю свое приложение через Karaf, возможно, проблема в этом.Вот скриншот моего списка связок на Karaf.Обратите внимание, что я добавил все банки Джены. Список связок Карафа

1 Ответ

0 голосов
/ 28 февраля 2019

Благодаря комментарию @AndyS я смог найти способ заставить его работать.Он указал в правильном направлении, сказав:

NPE на ARQ.isTrue: ARQ не инициализирован должным образом

Действительно, это была проблема, и я решил ее, инициализировавARQ, а не JenaSystem, как он предложил.По сути, я добавил org.apache.jena.query.ARQ.init() до того, как прозвучал Jena, и это сработало.Еще раз спасибо за вашу помощь и поддержку.

...