首页 > 解决方案 > Drools 引导决策表抛出空指针异常

问题描述

当我在 kie 工作台中创建引导决策表时,在执行无状态或有状态的 kie 会话时出现空指针异常。更具体地说,我使用 drools 7,并使用 java 和 grizzly 公开了一个简单的休息服务。当我使用简单的 drl 文件时,我的规则正在触发并正确执行,但是当我在 jar 中使用决策表进行部署时,我得到了 NPE。

Java代码:

 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;
}

引导决策表源码:

package gr.maven.test.testbuildinmaven;

//从行号:1规则“Row 1 TestDecisionTable”方言“mvel”当输入:InputDTO(field1 ==“Test1”)然后CustomerDto fact0 = new CustomerDto();fact0.setCustomerMessage("yesss"); 插入逻辑(事实0);结尾

//从行号:2规则“Row 2 TestDecisionTable”方言“mvel”当输入:InputDTO(field1 ==“Test2”)然后CustomerDto fact0 = new CustomerDto();fact0.setCustomerMessage("yes2"); 插入逻辑(事实0);结尾

//从行号:3规则“Row 3 TestDecisionTable”方言“mvel”当输入:InputDTO(field1 ==“Test3”)然后CustomerDto fact0 = new CustomerDto();fact0.setCustomerMessage("yesss"); 插入逻辑(事实0);结尾

例外:

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) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:423) 在 org.glassfish.hk2.utilities.reflection.ReflectionHelper.makeMe(ReflectionHelper.java:1129) 在 org.jvnet.hk2.internal.ClazzCreator .createMe(ClazzCreator.java:274) 在 org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:368) 在 org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471) 在 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) 在 org.glassfish.jersey.internal.inject.Injections.getOrCreate(Injections.java:169) 在 org.glassfish.jersey.server.model.MethodHandler$ClassBasedMethodHandler .getInstance(MethodHandler.java:185) 在 org.glassfish.jersey.server.internal.routing.PushMethodHandlerRouter.apply(PushMethodHandlerRouter.java:74) 在 org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage .java:109) 在 org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) 在 org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) 在 org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) 在 org.glassfish.jersey。 server.internal.routing.RoutingStage._apply(RoutingStage.java:112) 在 org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:92) 在 org.glassfish.jersey.server.internal。 routing.RoutingStage.apply(RoutingStage.java:61) 在 org.glassfish.jersey.process.internal.Stages.process(Stages.java:197) 在 org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java :297) 在 org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) 在 org.glassfish.jersey 的 org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)。内部.Errors.process(Errors.java:315) 在 org.glassfish.jersey.internal.Errors.process(Errors.java:297) 在 org.glassfish.jersey.internal.Errors.process(Errors.java:267) 在 org.glassfish.jersey.process.internal .RequestScope.runInScope(RequestScope.java:317) 在 org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:288) 在 org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1110) 在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) 在 org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545) 在 java.lang。Thread.run(Thread.java:748) 由 org.drools.compiler.builder.impl.KnowledgeBuilderImpl.guidedDecisionTableToPackageDescr(KnowledgeBuilderImpl.java:411) 中的 java.lang.NullPointerException 引起。 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) 在 org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackages(CompositeKnowledgeBuilderImpl.java:109) 在 org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:99) 在 org.drools.compiler.kie.builder.impl.AbstractKieModule.createKieBase(AbstractKieModule.java:210) 上的 org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:247) .drools.compiler.kie.builder.impl.KieContainerImpl.createKieBase(KieContainerImpl.java:389) 在 org.drools.compiler.kie.builder.impl.KieContainerImpl.getKieBase(KieContainerImpl.java:357) 在 org.drools.compiler .kie.builder.impl.KieContainerImpl.newStatelessKieSession(KieContainerImpl.java:550) 在 org.drools.compiler.kie.builder.impl.KieContainerImpl.newStatelessKieSession(KieContainerImpl.java:460) 在 org.drools.compiler.kie.builder .impl.KieContainerImpl.newStatelessKieSession(KieContainerImpl.java:455) 在 com.mycompany.grizzlypoc.rest.services.StatelessService。(StatelessService.java:37) ... 37 更多 MultiException 堆栈 2 of 2 java.lang.IllegalStateException:无法执行操作:在 org.jvnet.hk2.internal 的 com.mycompany.grizzlypoc.rest.services.StatelessService 上创建。 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)在 org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2064) 在 org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetService(ServiceLocatorImpl.java:711) 在 org.jvnet.hk2.internal.ServiceLocatorImpl.getService (ServiceLocatorImpl.java:653) 在 org.glassfish.jersey.internal.inject.Injections.getOrCreate(Injections.java:169) 在 org.glassfish.jersey。server.model.MethodHandler$ClassBasedMethodHandler.getInstance(MethodHandler.java:185) 在 org.glassfish.jersey.server.internal.routing.PushMethodHandlerRouter.apply(PushMethodHandlerRouter.java:74) 在 org.glassfish.jersey.server.internal。 routing.RoutingStage._apply(RoutingStage.java:109) 在 org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) 在 org.glassfish.jersey.server.internal.routing.RoutingStage。 _apply(RoutingStage.java:112) 在 org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) 在 org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage. java:112) 在 org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:92) 在 org.glassfish.jersey.server.internal.routing。RoutingStage.apply(RoutingStage.java:61) 在 org.glassfish.jersey.process.internal.Stages.process(Stages.java:197) 在 org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:297 ) 在 org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) 在 org.glassfish.jersey.internal 的 org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)。 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) 在 org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:288) 在 org.glassfish.jersey.server.ApplicationHandler.handle (ApplicationHandler.java:1110) 在 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)运行(线程.java:748)运行(线程.java:748)

标签: javadroolsgrizzlykie-workbench

解决方案


在我的 POM xml 中使用此依赖项解决了问题。

   <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-workbench-models-guided-dtable</artifactId>
        <version>7.7.0.Final</version>
    </dependency>

推荐阅读