Я работаю с Drools и Maven, и для решения проблемы ClassFormatException, сгенерированной из-за использования Java 8 и Drools, я использовал Janino для компиляции, как упомянуто здесь https://issues.jboss.org/browse/DROOLS-329.
Когда я запускаю его как приложение Java, оно работает хорошо, но когда я запускаю его как тест JUnit, я получаю исключение NullPointer (Да! Я уверен, что это не ноль, я пробую тот же пример, что и приложение Java, и хорошо работает).
Я уже добавил аргументы VM в класс JUnit, но он все равно не работает:
POM
`
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<!-- https://mvnrepository.com/artifact/org.drools/drools-core -->
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-core</artifactId>
<version>7.18.0.Final</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
<version>7.18.0.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.codehaus.janino/janino -->
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>janino</artifactId>
<version>2.5.16</version>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
`
JUnit класс, исключение нулевого указателя в sessionStatefull.setGlobal ("данные", данные); линия
`
public class TestRules {
static KieContainer kieContainer;
StatelessKieSession sessionStateless = null;
KieSession sessionStatefull = null;
@BeforeClass
public static void beforeClass() {
kieContainer = KnowledgeSessionHelper.createRuleBase();
}
@Test
public void testCuentasCoactivoLimite(){
sessionStatefull= KnowledgeSessionHelper
.getStatefulKnowledgeSession(kieContainer,"ksession-rules");
Data datos=new Data();
sessionStatefull.setGlobal("datos", datos);
Embargo embargo=new Embargo("e1",LocalDate.of(2018, 11, 24),TipoEmbargo.COACTIVO,new BigDecimal(18000000));
sessionStatefull.insert(embargo);
ArrayList<Persona> personas=new ArrayList<>();
personas.add(new Persona("p1", "e1",TipoIdentificacion.NATURAL, new BigDecimal(6000000)));
personas.add(new Persona("p2", "e1",TipoIdentificacion.NATURAL, new BigDecimal(6000000)));
personas.add(new Persona("p3", "e1",TipoIdentificacion.JURIDICA, new BigDecimal(6000000)));
personas.stream().forEach(x->sessionStatefull.insert(x));
ArrayList<Cuenta> cuentas=new ArrayList<>();
//p1
cuentas.add(new Cuenta("c1","p1","e1",TipoCuenta.AHORROS,SubtipoCuenta.BASICA,LocalDate.of(2014, 05, 26),
new BigDecimal(17000000),EstadoCuenta.ACTIVA));
cuentas.add(new Cuenta("c2","p1","e1",TipoCuenta.AHORROS,SubtipoCuenta.BASICA,LocalDate.of(2015, 05, 26),
new BigDecimal(3000000),EstadoCuenta.ACTIVA));
cuentas.add(new Cuenta("c3","p1","e1",TipoCuenta.CORRIENTE,SubtipoCuenta.BASICA,LocalDate.of(2016, 05, 26),
new BigDecimal(2000000),EstadoCuenta.ACTIVA));
//p2
cuentas.add(new Cuenta("c4","p2","e1",TipoCuenta.AHORROS,SubtipoCuenta.BASICA,LocalDate.of(2016, 05, 26),
new BigDecimal(3000000),EstadoCuenta.ACTIVA));
cuentas.add(new Cuenta("c5","p2","e1",TipoCuenta.CDT,SubtipoCuenta.BASICA,LocalDate.of(2016, 05, 26),
new BigDecimal(1000000),EstadoCuenta.ACTIVA));
cuentas.add(new Cuenta("c6","p2","e1",TipoCuenta.CDAT,SubtipoCuenta.BASICA,LocalDate.of(2016, 05, 26),
new BigDecimal(1000000),EstadoCuenta.ACTIVA));
cuentas.add(new Cuenta("c7","p2","e1",TipoCuenta.ELECTRONICOS,SubtipoCuenta.PUBLICO,LocalDate.of(2016, 05, 26),
new BigDecimal(1000000),EstadoCuenta.ACTIVA));
//p3
cuentas.add(new Cuenta("c8","p3","e1",TipoCuenta.AHORROS,SubtipoCuenta.BASICA,LocalDate.of(2014, 05, 26),
new BigDecimal(37000000),EstadoCuenta.ACTIVA));
cuentas.add(new Cuenta("c9","p3","e1",TipoCuenta.AHORROS,SubtipoCuenta.BASICA,LocalDate.of(2015, 05, 26),
new BigDecimal(3000000),EstadoCuenta.ACTIVA));
cuentas.stream().forEach(x->sessionStatefull.insert(x));
sessionStatefull.fireAllRules();
imprimir(embargo, personas, cuentas);
}
`
Я запускаю приведенный выше код в классе Java, и он работает