<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; color: rgb(0, 0, 0); font-size: 14px; font-family: Calibri, sans-serif; ">
<div>Hello,</div>
<div>I am facing a problem with the following code with Drools 5.0.1:</div>
<div><br>
</div>
<div>I insert multiple objects as facts into my stateful session here:</div>
<div><br>
</div>
<div>===============================================================</div>
<div>
<div>StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();</div>
<div> </div>
<div> /**<span style="font-weight: bold"> mapTypes here is an array of MapType objects
</span>**/ </div>
<div> for(int i=0;i<mapTypes.length;i++) {</div>
<div> System.out.println("Inserting the fact type: " + mapTypes[i]);</div>
<div> ksession.insert(mapTypes[i]);</div>
<div> } </div>
<div> </div>
<div> ksession.insert(ldapLookupKey);</div>
<div> ksession.insert(ldapResponseMap);</div>
<div> </div>
<div> ksession.fireAllRules();</div>
<div> ksession.dispose();</div>
</div>
<div>
<div>===============================================================</div>
<div></div>
</div>
<div><br>
</div>
<div>And here is my drools file:</div>
<div><br>
</div>
<div>
<div>===============================================================</div>
<div><br>
</div>
<div>
<div>rule "LocalRecipient"</div>
<div> when</div>
<div> $myMapType : MapType( name == "LocalRecipient" )</div>
<div> $lookupKey : String()</div>
<div> $ldapResponseMap : Map()</div>
<div> eval( ((($ldapResponseMap.get("zimbraMailDeliveryAddress").equals($lookupKey)) ||</div>
<div> ($ldapResponseMap.get("zimbraMailAlias").equals($lookupKey)) ||</div>
<div> ($ldapResponseMap.get("zimbraMailCatchAllAddress").equals($lookupKey))) &&</div>
<div> ($ldapResponseMap.get("zimbraMailStatus").equals("enabled"))) )</div>
<div> then</div>
<div> System.out.println("This LocalRecipient rule should work");</div>
<div> $myMapType.setQueryFilterCheck(true);</div>
<div>end</div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div>rule "VirtualMailboxDomain"</div>
<div> when</div>
<div> $myMapType : MapType( name == "VirtualMailboxDomain" )</div>
<div> $lookupKey : String()</div>
<div> $ldapResponseMap : Map()</div>
<div> eval( (($ldapResponseMap.get("zimbraDomainName").equals($lookupKey)) &&</div>
<div> ($ldapResponseMap.get("zimbraDomainType").equals("local")) &&</div>
<div> ($ldapResponseMap.get("zimbraMailStatus").equals("enabled"))) )</div>
<div> then</div>
<div> System.out.println("This VirtualMailboxDomain rule should work");</div>
<div> $myMapType.setQueryFilterCheck(true);</div>
<div>End</div>
</div>
<div><br>
</div>
<div>
<div>===============================================================</div>
</div>
<div><br>
</div>
<div><br>
</div>
<div>Now the problem I am facing is, as long as I defined only rule001 above, it works like a charm and the MapType.QueryFilterCheck flag gets set to TRUE. </div>
<div><br>
</div>
<div>As soon I put the rule002 above, I started getting a NullPointerException with the following lines in the stack trace.</div>
<div><br>
</div>
<div>
<div>
<div>===============================================================</div>
</div>
</div>
<div>Caused by: java.lang.NullPointerException</div>
<div>
<div> at com.aol.postfixcache.Rule_LocalRecipient_Rule_0.eval0(Rule_LocalRecipient_Rule_0.java:8)</div>
<div> at com.aol.postfixcache.Rule_LocalRecipient_Rule_0Eval0Invoker.evaluate(Rule_LocalRecipient_Rule_0Eval0Invoker.java:23)</div>
<div> at org.drools.rule.EvalCondition.isAllowed(EvalCondition.java:117)</div>
</div>
<div>
<div>
<div>===============================================================</div>
</div>
</div>
<div><br>
</div>
<div><br>
</div>
<div>I tried different combinations along with an extensive search to see why I am getting this, but couldn't crack it. Appreciate your help.</div>
<div><br>
</div>
<div>Regards,</div>
<div>Murty.</div>
<div><br>
</div>
<div><br>
</div>
<div></div>
</div>
</body>
</html>