Drools Guided Decision Table генерирует исключение нулевого указателя - PullRequest
0 голосов
/ 09 мая 2018

Когда я создаю таблицу управляемых решений в рабочей среде kie, я получаю исключение нулевого указателя при выполнении сеанса kie без сохранения состояния или состояния. Чтобы быть более конкретным, я использую drools 7 и представляю простой сервис отдыха с Java и Grizzly. Когда я использую простые файлы drl, мои правила запускаются и выполняются правильно, но когда я развертываюсь с таблицей решений внутри моей банки, я получаю 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 правило "Строка 1 TestDecisionTable" диалект "мвел" когда Input: InputDTO (field1 == "Test1") затем CustomerDto fact0 = new CustomerDto (); fact0.setCustomerMessage ("yesss"); insertLogical (fact0); конец

// из номера строки: 2 правило "Строка 2 TestDecisionTable" диалект "мвел" когда Input: InputDTO (field1 == "Test2") затем CustomerDto fact0 = new CustomerDto (); fact0.setCustomerMessage ("yes2"); insertLogical (fact0); конец

// из номера строки: 3 правило "Строка 3 TestDecisionTable" диалект "мвел" когда Input: InputDTO (field1 == "Test3") затем CustomerDto fact0 = new CustomerDto (); fact0.setCustomerMessage ("yesss"); insertLogical (fact0); конец

Исключение:

WARNING: The following warnings have been detected: WARNING: Unknown HK2 failure detected:

стек MultiException 1 из 2 java.lang.ExceptionInInitializerError at sun.reflect.NativeConstructorAccessorImpl.newInstance0 (собственный метод) 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) в 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.Injected.getOrCreate (Injection.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:271) на org.glassfish.jersey.internal.Errors $ 1.call (Errors.java:267) на org.glassfish.jersey.internal.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).org.glassfish.grizzly.http.server.HttpHandler $ 1.run (HttpHandler.java:219) в org.glassfish.grizzly.threadpool.AbstractThreadPool $ Worker.doWork (AbstractThreadPool.java:565) в org.glassfish.grizzly..AbstractThreadPool $ Worker.run (AbstractThreadPool.java:545) в java.lang.Thread.run (Thread.java:748) Вызывается:(KnowledgeBuilderImpl.java:411) в org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl $ ResourceToPkgDescrMapper.lambda $ static6 долларов СШАпо адресу org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackages (CompositeKnowledgeBuilderImpl.java:109) по адресу org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildr..builder.impl.AbstractKieProject.buildKnowledgePackages (AbstractKieProject.java:247) в org.drools.compiler.kie.builder.impl.AbstractKieModule.createKieBase (AbstractKieModule.java:210) в org.drools.pile..KieContainerImpl.createKieBase (KieContainerImpl.java:389) в org.drools.compiler.kie.builder.impl.KieContainerImpl.getKieBase (KieContainerImpl.java:357) в org.drools.compdernie.In (KieContainerImpl.java:550) в org.drools.compiler.kie.builder.impl.KieContainerImpl.newStatelessKieSession (KieContainerImpl.java:460) в org.drools.compiler.kie.builder.impl.KieContainIIIJava: 455) at com.mycompany.grizzlypoc.rest.services.StatelessService. (StatelessService.java:37) ... ... еще 37 стек MultiException 2 из 2 java.lang.IllegalStateException: Невозможно выполнить операцию: создать на com.mycompany.grizzlypoc.rest.services.StatelessService в org.jvnet.hk2.internal.ClazzCreator.create (ClazzCreator.java:395) в org.jvnet.hk2.internal.SystemDescriptor.create (SystemDescriptor.java:471) в или.jersey.process.internal.RequestScope.findOrCreate (RequestScope.java:162) в org.jvnet.hk2.internal.Utilities.createService (Utilities.java:2064) в org.jvnet.hk2.internal.ServiceLocatorImpl.lternalLet.java: 711) в org.jvnet.hk2.internal.ServiceLocatorImpl.getService (ServiceLocatorImpl.java:653) в org.glassfish.jersey.internal.inject.Injection.getOrCreate (Injection.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.serout.outing.r._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:271) на org.glassfish.jersey.internal.Errors $ 1.call (Errors.java:267) на org.glassfish.jersey.internal.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) на org.glassfish.grizzly.http.server.HttpHandler $ 1.run (HttpHandler.java:219) на org.glassfish.grizzly.threadpool.AbstractThreadPool $ Worker.doWork (AbstractThreadPool.java:565) на org.glassfish.grizzly.threadpool.AbstractThreadPool $ Worker.run (AbstractThreadPool.java:545) at java.lang.Thread.run (Thread.java:748)

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Я перепутал, какой POM.xml файл должен быть изменен (то есть на стороне правила или на стороне приложения).

Сегодня я попробовал и получил этот ответ! необходимо с приложением .

Мой build.gradle ниже:


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

Мой проект Котлин работал нормально.

0 голосов
/ 10 мая 2018

Проблема решена с помощью этой зависимости в моем POM xml.

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