Reputation: 81
When i create a guided decision table in kie workbench i get null pointer exception on execution of a stateless or statefull kie session. To be more specific i use drools 7 and i expose a simple rest service with java and grizzly. When i use simple drl files my rules are firing and executing correctly, but when i deploy with the decision table inside my jar i get NPE.
Java code:
public CustomerDto executeStatelessPOC(final String param,
final StatelessKieSession kSession ,final KieServices kServices) {
//Myexample is just the entry fact
InputDTO example = new InputDTO();
example.setField1(param);
CustomerDto response = new CustomerDto();
try {
KieCommands kieCommands = kServices.getCommands();
List<Command> cmds = new ArrayList<Command>();
cmds.add(kieCommands.newInsert(example));
cmds.add(kieCommands.newInsert(response, "customerResponse"));
//Execute rules with facts provided before
ExecutionResults results = kSession.execute(kieCommands.newBatchExecution(cmds));
//Get the response as part of the results
response = (CustomerDto) results.getValue("customerResponse");
return response;
} catch (Exception e) {
System.out.println("Exception e: " + e.toString());
System.out.println("Exception e: " + Arrays.toString(e.getStackTrace()));
}
return response;
}
Source code of the guided decision table:
package gr.maven.test.testbuildinmaven;
//from row number: 1 rule "Row 1 TestDecisionTable" dialect "mvel" when Input : InputDTO( field1 == "Test1" ) then CustomerDto fact0 = new CustomerDto(); fact0.setCustomerMessage( "yesss" ); insertLogical( fact0 ); end
//from row number: 2 rule "Row 2 TestDecisionTable" dialect "mvel" when Input : InputDTO( field1 == "Test2" ) then CustomerDto fact0 = new CustomerDto(); fact0.setCustomerMessage( "yes2" ); insertLogical( fact0 ); end
//from row number: 3 rule "Row 3 TestDecisionTable" dialect "mvel" when Input : InputDTO( field1 == "Test3" ) then CustomerDto fact0 = new CustomerDto(); fact0.setCustomerMessage( "yesss" ); insertLogical( fact0 ); end
Exception:
WARNING: The following warnings have been detected: WARNING: Unknown HK2 failure detected:
MultiException stack 1 of 2 java.lang.ExceptionInInitializerError at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.glassfish.hk2.utilities.reflection.ReflectionHelper.makeMe(ReflectionHelper.java:1129) at org.jvnet.hk2.internal.ClazzCreator.createMe(ClazzCreator.java:274) at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:368) at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471) at org.glassfish.jersey.process.internal.RequestScope.findOrCreate(RequestScope.java:162) at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2064) at org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetService(ServiceLocatorImpl.java:711) at org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:653) at org.glassfish.jersey.internal.inject.Injections.getOrCreate(Injections.java:169) at org.glassfish.jersey.server.model.MethodHandler$ClassBasedMethodHandler.getInstance(MethodHandler.java:185) at org.glassfish.jersey.server.internal.routing.PushMethodHandlerRouter.apply(PushMethodHandlerRouter.java:74) at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:109) at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) at org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:92) at org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:61) at org.glassfish.jersey.process.internal.Stages.process(Stages.java:197) at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:297) at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) at org.glassfish.jersey.internal.Errors.process(Errors.java:315) at org.glassfish.jersey.internal.Errors.process(Errors.java:297) at org.glassfish.jersey.internal.Errors.process(Errors.java:267) at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:288) at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1110) at org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpContainer.service(GrizzlyHttpContainer.java:381) at org.glassfish.grizzly.http.server.HttpHandler$1.run(HttpHandler.java:219) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.NullPointerException at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.guidedDecisionTableToPackageDescr(KnowledgeBuilderImpl.java:411) at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl$ResourceToPkgDescrMapper.lambda$static$6(CompositeKnowledgeBuilderImpl.java:309) at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildResource(CompositeKnowledgeBuilderImpl.java:187) at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackageDescr(CompositeKnowledgeBuilderImpl.java:176) at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackages(CompositeKnowledgeBuilderImpl.java:109) at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:99) at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:247) at org.drools.compiler.kie.builder.impl.AbstractKieModule.createKieBase(AbstractKieModule.java:210) at org.drools.compiler.kie.builder.impl.KieContainerImpl.createKieBase(KieContainerImpl.java:389) at org.drools.compiler.kie.builder.impl.KieContainerImpl.getKieBase(KieContainerImpl.java:357) at org.drools.compiler.kie.builder.impl.KieContainerImpl.newStatelessKieSession(KieContainerImpl.java:550) at org.drools.compiler.kie.builder.impl.KieContainerImpl.newStatelessKieSession(KieContainerImpl.java:460) at org.drools.compiler.kie.builder.impl.KieContainerImpl.newStatelessKieSession(KieContainerImpl.java:455) at com.mycompany.grizzlypoc.rest.services.StatelessService.(StatelessService.java:37) ... 37 more MultiException stack 2 of 2 java.lang.IllegalStateException: Unable to perform operation: create on com.mycompany.grizzlypoc.rest.services.StatelessService at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:395) at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471) at org.glassfish.jersey.process.internal.RequestScope.findOrCreate(RequestScope.java:162) at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2064) at org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetService(ServiceLocatorImpl.java:711) at org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:653) at org.glassfish.jersey.internal.inject.Injections.getOrCreate(Injections.java:169) at org.glassfish.jersey.server.model.MethodHandler$ClassBasedMethodHandler.getInstance(MethodHandler.java:185) at org.glassfish.jersey.server.internal.routing.PushMethodHandlerRouter.apply(PushMethodHandlerRouter.java:74) at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:109) at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) at org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:92) at org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:61) at org.glassfish.jersey.process.internal.Stages.process(Stages.java:197) at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:297) at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) at org.glassfish.jersey.internal.Errors.process(Errors.java:315) at org.glassfish.jersey.internal.Errors.process(Errors.java:297) at org.glassfish.jersey.internal.Errors.process(Errors.java:267) at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:288) at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1110) at org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpContainer.service(GrizzlyHttpContainer.java:381) at org.glassfish.grizzly.http.server.HttpHandler$1.run(HttpHandler.java:219) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545) at java.lang.Thread.run(Thread.java:748)
Upvotes: 0
Views: 1818
Reputation: 11
I had confused which POM.xml
file should be changed (i.e. rule side or application side).
Today I tried and got that answer! it necessary with application side.
My build.gradle is below:
buildscript {
ext {
drools_version = '7.7.0.Final'
}
}
dependencies {
compile "org.drools:drools-workbench-models-guided-dtable:$drools_version"
compile "org.kie:kie-api:$drools_version"
}
It worked fine my kotlin project.
Upvotes: 1
Reputation: 81
Problem is solved using this dependency in my POM xml.
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-workbench-models-guided-dtable</artifactId>
<version>7.7.0.Final</version>
</dependency>
Upvotes: 2