samuel-beniamin opened a new issue, #1474:
URL: https://github.com/apache/incubator-kie-issues/issues/1474
## Current behaviour
Currently when trying to load multiple DMN in a certain order, where an XML
file that contain a MID (Multi Instance Decision) loads first, then load
another XML file. We get the following exception:
```
[main] ERROR o.k.d.core.compiler.DMNCompilerImpl.compile:200 - Error
compiling model from source.
java.lang.NullPointerException: Cannot invoke
"org.kie.dmn.core.ast.DMNBaseNode.getDependencies()" because "node" is null
at
org.kie.dmn.core.internal.utils.DRGAnalysisUtils.internalDependencies(DRGAnalysisUtils.java:60)
at
org.kie.dmn.core.internal.utils.DRGAnalysisUtils.dependencies(DRGAnalysisUtils.java:54)
at
org.kie.dmn.signavio.MultiInstanceDecisionLogic$MIDDependenciesProcessor.findAllDependencies(MultiInstanceDecisionLogic.java:176)
at
org.kie.dmn.signavio.MultiInstanceDecisionLogic$MultiInstanceDecisionNodeCompiler.addRequiredDecisions(MultiInstanceDecisionLogic.java:147)
at
org.kie.dmn.signavio.MultiInstanceDecisionLogic$MultiInstanceDecisionNodeCompiler.lambda$compileEvaluator$1(MultiInstanceDecisionLogic.java:139)
at
org.kie.dmn.core.compiler.DMNCompilerImpl.processDrgElements(DMNCompilerImpl.java:482)
at
org.kie.dmn.core.compiler.DMNCompilerImpl.compile(DMNCompilerImpl.java:263)
at
org.kie.dmn.core.compiler.DMNCompilerImpl.compile(DMNCompilerImpl.java:198)
at
org.kie.dmn.core.assembler.DMNAssemblerService.compileResourceToModel(DMNAssemblerService.java:177)
at
org.kie.dmn.core.assembler.DMNAssemblerService.internalAddResource(DMNAssemblerService.java:152)
at
org.kie.dmn.core.assembler.DMNAssemblerService.addResourcesAfterRules(DMNAssemblerService.java:127)
at
org.kie.internal.services.KieAssemblersImpl.addResourcesAfterRules(KieAssemblersImpl.java:86)
at
org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildAssemblerResourcesAfterRules(CompositeKnowledgeBuilderImpl.java:204)
at
org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:124)
at
org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:109)
at
org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:280)
at
org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:220)
at
org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:84)
at
org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:285)
at
org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:251)
at
org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:198)
```
### What, after some debug, I see is happening:
After the introduction of the `afterDRGcallbacks` in the `DMNCompilerImpl`.
The `MultiInstanceDecisionLogic` decided to use the callbacks. Which adds a
callback to the `DMNCompilerImpl` which in turn executes this callback
regardless of which model it is evaluating currently. This lead to the
evaluation of some callbacks, which were originally registered/added for the
MID on some other models. This leads to a NPE when trying to execute the call
back on a different model.
## Expected behaviour
Load multiple models from XML that contain MIDs and non MIDs in a any order,
then we are able to build a `KieBuilder` for them all.
## How to reproduce?
Load multiple files with Mids into a single runtime:
```java
public void createRuntime() {
final KieServices ks = KieServices.Factory.get();
final KieFileSystem kfs = ks.newKieFileSystem();
KieModuleModel kmm = ks.newKieModuleModel();
kmm.setConfigurationProperty("org.kie.dmn.profiles.signavio",
"org.kie.dmn.signavio.KieDMNSignavioProfile");
kfs.writeKModuleXML(kmm.toXML());
// Where here both files contain Signavio MIDs
kfs.write(ks.getResources().newClassPathResource("file1.xml",
this.getClass())
kfs.write(ks.getResources().newClassPathResource("file2.xml",
this.getClass())
// Throws NPE
KieBuilder kieBuilder = ks.newKieBuilder(kfs).buildAll();
}
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]