Слюнь слюни и заводскиJAVA

Программисты JAVA общаются здесь
Anonymous
Слюнь слюни и заводски

Сообщение Anonymous »

Я обновляю проект слюни с древней версии до 9.44, потому что он рекомендуется здесь: https://www.baeldung.com/drools-excel.
Я написал модульный тест, чтобы проверить свои классы правил и следить за тем, чтобы новая установка собиралась работать. Вот моя тестовая функция. < /P>

Код: Выделить всё

/**
* From a decision table, create a KIE container
* @param is the input stream to read
* @return a kie container
*/
public static KieContainer getKieContainerFromStream(InputStream is){
KieServices kieServices = KieServices.Factory.get();
Resource resource = ResourceFactory.newInputStreamResource(is);
KieFileSystem kieFileSystem = kieServices.newKieFileSystem().write(resource);
KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);
kieBuilder.buildAll();
KieRepository kieRepository = kieServices.getRepository();
ReleaseId krDefaultReleaseId = kieRepository.getDefaultReleaseId();
KieContainer result = kieServices.newKieContainer(krDefaultReleaseId);
return result;
}
< /code>
А потом я написал модульный тест, чтобы начать ходить по коду: < /p>
    InputStream is = getClass().getClassLoader().getResourceAsStream(POSTPONE_RULES);
KieContainer kieContainer = DroolsUtil.getKieContainerFromStream(is);
Этот тест сбивается с ударом, потому что kieservices.factory.get () возвращает Null.
После рассмотрения об этом какое -то время я вытащил пример кода, и он начинается с:

Код: Выделить всё

    KieContainer kc = KieServices.Factory.get().getKieClasspathContainer();
< /code>
И это не взрывается с NPE на вызове Getkie ... так что это не возвращает NULL. < /p>
HMM. Точно такой же код и разные результаты? Рабочий пример выше, а затем создайте модульный тест там, запустите его и посмотрите, что произойдет. Таким образом, я создаю новый модульный тест для ценообразования из слюни. Сначала я немного переоцениваю пример: < /p>
/**
* This shows off a decision table.
*/
public class PricingRuleDTExample {

public static final void main(String[] args) {
KieContainer kc = getContainer();
System.out.println(kc.verify().getMessages().toString());
execute( kc );
}

public static KieContainer getContainer() {
KieContainer result = KieServices.Factory.get().getKieClasspathContainer();
return result;
}

public static void execute( KieContainer kc ) {
StatelessKieSession ksession = kc.newStatelessKieSession( "DecisionTableKS");

//now create some test data
Driver driver = new Driver();
Policy policy = new Policy();

ksession.execute( Arrays.asList(driver, policy));

System.out.println( "BASE PRICE IS: " + policy.getBasePrice() );
System.out.println( "DISCOUNT IS: " + policy.getDiscountPercent() );

policy.getBasePrice();
}
}
< /code>
Затем я создаю модульный тест: < /p>
public class PricingRuleDTExampleTest {

@Before
public void setUp() throws Exception {
}

@Test
public void getContainer() {
assertNotNull(PricingRuleDTExample.getContainer());
}
}
< /code>
И он работает отлично. ???? < /p>
ОК, это уже не смешно.    public static KieContainer getKieContainerFromStream(InputStream is){
KieContainer result = KieServices.Factory.get().getKieClasspathContainer();
//      KieServices kieServices = KieServices.Factory.get();
//      Resource resource = ResourceFactory.newInputStreamResource(is);
//      KieFileSystem kieFileSystem = kieServices.newKieFileSystem().write(resource);
//      KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);
//      kieBuilder.buildAll();
//      KieRepository kieRepository = kieServices.getRepository();
//      ReleaseId krDefaultReleaseId = kieRepository.getDefaultReleaseId();
//      KieContainer result = kieServices.newKieContainer(krDefaultReleaseId);
return result;
}
и он успешно возвращается.>

Подробнее здесь: https://stackoverflow.com/questions/796 ... rning-null

Вернуться в «JAVA»