Wimmics/corese

[Bug][Corese-docker] Exception thown when sending UPDATE query with OWL RL reasoning

MaillPierre opened this issue · 0 comments

Issue Description:
When sending an UPDATE Insert query to a corese server with -su and -o options, an exception is thrown but data is still generated.

Bug Details:

The exception signature is always the same :

corese_1  | 2024-02-12 13:06:56 INFO  rule.RuleEngine.process:448 [] - process: </rule/owlrl.rul>
corese_1  | Feb 12, 2024 1:06:56 PM fr.inria.corese.core.visitor.solver.QuerySolverVisitorRule create
corese_1  | SEVERE: null
corese_1  | java.lang.ClassNotFoundException: $vis.QuerySolverVisitorRuleUser
corese_1  | 	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
corese_1  | 	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
corese_1  | 	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
corese_1  | 	at java.base/java.lang.Class.forName0(Native Method)
corese_1  | 	at java.base/java.lang.Class.forName(Class.java:315)
corese_1  | 	at fr.inria.corese.core.visitor.solver.QuerySolverVisitorRule.create(QuerySolverVisitorRule.java:145)
corese_1  | 	at fr.inria.corese.core.visitor.solver.QuerySolverVisitorRule.create(QuerySolverVisitorRule.java:136)
corese_1  | 	at fr.inria.corese.core.rule.RuleEngine.beforeProcess(RuleEngine.java:500)
corese_1  | 	at fr.inria.corese.core.rule.RuleEngine.process(RuleEngine.java:449)
corese_1  | 	at fr.inria.corese.core.rule.RuleEngine.process(RuleEngine.java:439)
corese_1  | 	at fr.inria.corese.core.Workflow.run(Workflow.java:113)
corese_1  | 	at fr.inria.corese.core.Workflow.process(Workflow.java:70)
corese_1  | 	at fr.inria.corese.core.Graph.process(Graph.java:777)
corese_1  | 	at fr.inria.corese.core.Graph.init(Graph.java:1115)
corese_1  | 	at fr.inria.corese.core.EventManager.start(EventManager.java:155)
corese_1  | 	at fr.inria.corese.core.query.ProducerImpl.start(ProducerImpl.java:748)
corese_1  | 	at fr.inria.corese.kgram.core.Eval.queryBasic(Eval.java:208)
corese_1  | 	at fr.inria.corese.kgram.core.Eval.query(Eval.java:199)
corese_1  | 	at fr.inria.corese.compiler.eval.QuerySolver.query(QuerySolver.java:335)
corese_1  | 	at fr.inria.corese.core.query.QueryProcess.basicQuery(QueryProcess.java:988)
corese_1  | 	at fr.inria.corese.core.query.update.UpdateProcess.update(UpdateProcess.java:236)
corese_1  | 	at fr.inria.corese.core.query.update.UpdateProcess.process(UpdateProcess.java:171)
corese_1  | 	at fr.inria.corese.core.query.update.UpdateProcess.update(UpdateProcess.java:113)
corese_1  | 	at fr.inria.corese.core.query.QueryProcessUpdate.update(QueryProcessUpdate.java:118)
corese_1  | 	at fr.inria.corese.core.query.QueryProcessUpdate.synchronizedUpdate(QueryProcessUpdate.java:77)
corese_1  | 	at fr.inria.corese.core.query.QueryProcessUpdate.synUpdate(QueryProcessUpdate.java:59)
corese_1  | 	at fr.inria.corese.core.query.QueryProcess.basicQueryProcess(QueryProcess.java:791)
corese_1  | 	at fr.inria.corese.core.query.QueryProcess.basicQuery(QueryProcess.java:760)
corese_1  | 	at fr.inria.corese.core.query.QueryProcess.query(QueryProcess.java:546)
corese_1  | 	at fr.inria.corese.core.query.QueryProcess.doQuery(QueryProcess.java:542)
corese_1  | 	at fr.inria.corese.core.query.QueryProcess.query(QueryProcess.java:508)
corese_1  | 	at fr.inria.corese.core.query.QueryProcess.query(QueryProcess.java:512)
corese_1  | 	at fr.inria.corese.server.webservice.TripleStore.query(TripleStore.java:219)
corese_1  | 	at fr.inria.corese.server.webservice.SPARQLResult.getResultFormat(SPARQLResult.java:102)
corese_1  | 	at fr.inria.corese.server.webservice.SPARQLRestAPI.getResultFormat(SPARQLRestAPI.java:331)
corese_1  | 	at fr.inria.corese.server.webservice.SPARQLRestAPI.myGetResult(SPARQLRestAPI.java:345)
corese_1  | 	at fr.inria.corese.server.webservice.SPARQLRestAPI.getResultForPost(SPARQLRestAPI.java:358)
corese_1  | 	at fr.inria.corese.server.webservice.SPARQLRestAPI.getRDFGraphJsonLDForPost(SPARQLRestAPI.java:857)
corese_1  | 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
corese_1  | 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
corese_1  | 	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
corese_1  | 	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
corese_1  | 	at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52)
corese_1  | 	at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:124)
corese_1  | 	at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:167)
corese_1  | 	at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:176)
corese_1  | 	at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:79)
corese_1  | 	at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:475)
corese_1  | 	at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:397)
corese_1  | 	at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:81)
corese_1  | 	at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:255)
corese_1  | 	at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248)
corese_1  | 	at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244)
corese_1  | 	at org.glassfish.jersey.internal.Errors.process(Errors.java:292)
corese_1  | 	at org.glassfish.jersey.internal.Errors.process(Errors.java:274)
corese_1  | 	at org.glassfish.jersey.internal.Errors.process(Errors.java:244)
corese_1  | 	at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265)
corese_1  | 	at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:234)
corese_1  | 	at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:684)
corese_1  | 	at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:394)
corese_1  | 	at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346)
corese_1  | 	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:358)
corese_1  | 	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:311)
corese_1  | 	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205)
corese_1  | 	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:764)
corese_1  | 	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:529)
corese_1  | 	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221)
corese_1  | 	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1382)
corese_1  | 	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:176)
corese_1  | 	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:484)
corese_1  | 	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:174)
corese_1  | 	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1304)
corese_1  | 	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:129)
corese_1  | 	at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:192)
corese_1  | 	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
corese_1  | 	at org.eclipse.jetty.server.Server.handle(Server.java:563)
corese_1  | 	at org.eclipse.jetty.server.HttpChannel.lambda$handle$0(HttpChannel.java:505)
corese_1  | 	at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:762)
corese_1  | 	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:497)
corese_1  | 	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:282)
corese_1  | 	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:314)
corese_1  | 	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100)
corese_1  | 	at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
corese_1  | 	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:416)
corese_1  | 	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:385)
corese_1  | 	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:272)
corese_1  | 	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.produce(AdaptiveExecutionStrategy.java:194)
corese_1  | 	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:936)
corese_1  | 	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1080)
corese_1  | 	at java.base/java.lang.Thread.run(Thread.java:834)
corese_1  | 
corese_1  | 2024-02-12 13:06:56 ERROR solver.QuerySolverVisitorRule.create:155 [] - Undefined Visitor: $vis.QuerySolverVisitorRuleUser
corese_1  | DataBrokerConstruct startRuleEngine
corese_1  | 2024-02-12 13:06:56 INFO  rule.RuleEngine.beforeClean:347 [] - Before clean graph size: 4
corese_1  | Clean: 0.021
corese_1  | 2024-02-12 13:06:56 INFO  rule.RuleEngine.afterClean:353 [] - After clean graph size: 4
corese_1  | 2024-02-12 13:06:56 INFO  rule.RuleEngine.infer:813 [] - loop: 0
corese_1  | 2024-02-12 13:06:56 INFO  rule.RuleEngine.infer:828 [] - rules: 72
corese_1  | 2024-02-12 13:06:56 INFO  rule.RuleEngine.infer:813 [] - loop: 1
corese_1  | 2024-02-12 13:06:56 INFO  rule.RuleEngine.infer:828 [] - rules: 72
corese_1  | 2024-02-12 13:06:56 INFO  rule.RuleEngine.infer:813 [] - loop: 2
corese_1  | 2024-02-12 13:06:56 INFO  rule.RuleEngine.infer:828 [] - rules: 72

Steps to Reproduce:
The bug_minimal.zip file contains code based on the corese docker image to reproduce the bug. The example is launched using the run.sh script
It loads a minimal ontology:

@prefix dcat: <http://www.w3.org/ns/dcat#> .
@prefix dcmitype: <http://purl.org/dc/dcmitype/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix schema: <http://schema.org/> .
@prefix sd: <http://www.w3.org/ns/sparql-service-description#> .
@prefix void: <http://rdfs.org/ns/void#> .

dcat:Dataset owl:equivalentClass schema:Dataset ,
    dcmitype:Dataset ,
    void:Dataset ,        
    sd:Dataset .

and sends the following query:

PREFIX dcat: <http://www.w3.org/ns/dcat#>
PREFIX kgi: <http://ns.inria.fr/kg/index#>

INSERT DATA {
    kgi:Dataset a dcat:Dataset .
}

Note to Developers:

I haven't noted any missing triples, but the exception is throwing with any INSERT query done in these conditions.