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]

Reply via email to