That&#39;s a nice one.. We will definitely create a test for that.. if it&#39;s not there..<br><br><div class="gmail_quote">2011/9/26 Swindells, Thomas <span dir="ltr">&lt;<a href="mailto:TSwindells@nds.com">TSwindells@nds.com</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">





<div lang="EN-US" link="blue" vlink="purple">
<div>
<p class="MsoNormal">I’ve just tried upgrading from Drools 5.3.0-CR1 from the beta and I’ve hit a regression.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">JBoss seems to have been down for most of today so I haven’t been able to raise a Jira for it.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">In our model we have Facts which contain fields of java.lang.class, we then have a rule which checks that they aren’t null.<u></u><u></u></p>
<p class="MsoNormal">Eg<u></u><u></u></p>
<p class="MsoNormal">Fact { Class&lt;Object&gt; classField}<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Rule “xyz”<u></u><u></u></p>
<p class="MsoNormal">When<u></u><u></u></p>
<p class="MsoNormal">                Fact(classField != null)<u></u><u></u></p>
<p class="MsoNormal">Then<u></u><u></u></p>
<p class="MsoNormal">…<u></u><u></u></p>
<p class="MsoNormal">End<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">This is giving the following exception<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Caused by: java.lang.ClassCastException: org.drools.base.field.ObjectFieldImpl cannot be cast to org.drools.base.field.ClassFieldImpl<u></u><u></u></p>
<p class="MsoNormal">                at org.drools.base.evaluators.EqualityEvaluatorsDefinition$ClassEqualEvaluator.evaluate(EqualityEvaluatorsDefinition.java:1772)<u></u><u></u></p>
<p class="MsoNormal">                at org.drools.rule.LiteralRestriction.isAllowed(LiteralRestriction.java:87)<u></u><u></u></p>
<p class="MsoNormal">                at org.drools.rule.LiteralConstraint.isAllowed(LiteralConstraint.java:109)<u></u><u></u></p>
<p class="MsoNormal">                at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:130)<u></u><u></u></p>
<p class="MsoNormal">                at org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:451)<u></u><u></u></p>
<p class="MsoNormal">                at org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:369)<u></u><u></u></p>
<p class="MsoNormal">                at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:134)<u></u><u></u></p>
<p class="MsoNormal">                at org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:451)<u></u><u></u></p>
<p class="MsoNormal">                at org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:379)<u></u><u></u></p>
<p class="MsoNormal">                at org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:204)<u></u><u></u></p>
<p class="MsoNormal">                at org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:244)<u></u><u></u></p>
<p class="MsoNormal">                at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:330)<u></u><u></u></p>
<p class="MsoNormal">                at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:291)<u></u><u></u></p>
<p class="MsoNormal">                at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:882)<u></u><u></u></p>
<p class="MsoNormal">                at org.drools.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:180)<u></u><u></u></p>
<p class="MsoNormal">                ... 149 more<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Wrapping the classField != null within an eval appears to be a work around.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">This is in the suspect method:<u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:Consolas;color:black">       
</span><b><span style="font-size:10.0pt;font-family:Consolas;color:#7F0055">public</span></b><span style="font-size:10.0pt;font-family:Consolas;color:black">
</span><b><span style="font-size:10.0pt;font-family:Consolas;color:#7F0055">boolean</span></b><span style="font-size:10.0pt;font-family:Consolas;color:black"> evaluate(InternalWorkingMemory workingMemory,</span><span style="font-size:10.0pt;font-family:Consolas"><u></u><u></u></span></p>

<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:Consolas;color:black">                               
</span><b><span style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span style="font-size:10.0pt;font-family:Consolas;color:black"> InternalReadAccessor extractor,</span><span style="font-size:10.0pt;font-family:Consolas"><u></u><u></u></span></p>

<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:Consolas;color:black">                               
</span><b><span style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span style="font-size:10.0pt;font-family:Consolas;color:black"> Object object1,
</span><b><span style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span style="font-size:10.0pt;font-family:Consolas;color:black"> FieldValue object2) {</span><span style="font-size:10.0pt;font-family:Consolas"><u></u><u></u></span></p>

<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:Consolas;color:black">            Object value1 = extractor.getValue( workingMemory, object1 );</span><span style="font-size:10.0pt;font-family:Consolas"><u></u><u></u></span></p>

<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:Consolas;color:black">            Object value2 = object2.getValue();</span><span style="font-size:10.0pt;font-family:Consolas"><u></u><u></u></span></p>

<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:Consolas;color:black">           
</span><b><span style="font-size:10.0pt;font-family:Consolas;color:#7F0055">if</span></b><span style="font-size:10.0pt;font-family:Consolas;color:black"> ( value2 ==
</span><b><span style="font-size:10.0pt;font-family:Consolas;color:#7F0055">null</span></b><span style="font-size:10.0pt;font-family:Consolas;color:black"> ) {</span><span style="font-size:10.0pt;font-family:Consolas"><u></u><u></u></span></p>

<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:Consolas;color:black">                ClassFieldImpl classField = (ClassFieldImpl) object2;</span><span style="font-size:10.0pt;font-family:Consolas"><u></u><u></u></span></p>

<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:Consolas;color:black">                value2 = classField.resolve( workingMemory );</span><span style="font-size:10.0pt;font-family:Consolas"><u></u><u></u></span></p>

<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:Consolas;color:black">            }</span><span style="font-size:10.0pt;font-family:Consolas"><u></u><u></u></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:Consolas;color:black">           
</span><b><span style="font-size:10.0pt;font-family:Consolas;color:#7F0055">return</span></b><span style="font-size:10.0pt;font-family:Consolas;color:black">
</span><i><span style="font-size:10.0pt;font-family:Consolas;color:#0000C0">comparator</span></i><span style="font-size:10.0pt;font-family:Consolas;color:black">.equals( value1, value2 );</span><span style="font-size:10.0pt;font-family:Consolas"><u></u><u></u></span></p>

<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;color:black">        }<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;color:black"><u></u> <u></u></span></p>
<p class="MsoNormal">I think the if statement just needs an instanceof check as well or some other way to track the fact that null may be a valid value to be comparing with!<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Thomas<u></u><u></u></p>
</div>
<br>
<hr>
<font face="Arial" color="Gray" size="1"><br>
**************************************************************************************<br>
This message is confidential and intended only for the addressee. If you have received this message in error, please immediately notify the <a href="mailto:postmaster@nds.com" target="_blank">postmaster@nds.com</a> and delete it from your system as well as any copies. The content of e-mails as well as traffic data
 may be monitored by NDS for employment and security purposes. To protect the environment please do not print this e-mail unless necessary.<br>
<br>
NDS Limited. Registered Office: One London Road, Staines, Middlesex, TW18 4EX, United Kingdom. A company registered in England and Wales. Registered no. 3080780. VAT no. GB 603 8808 40-00<br>
**************************************************************************************<br>
</font>
</div>

<br>_______________________________________________<br>
rules-users mailing list<br>
<a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br> - CTO @ <a href="http://www.plugtree.com" target="_blank">http://www.plugtree.com</a>  <br> - MyJourney @ <a href="http://salaboy.wordpress.com" target="_blank">http://salaboy.wordpress.com</a><div>
- Co-Founder @ <a href="http://www.jugargentina.org" target="_blank">http://www.jugargentina.org</a><br> - Co-Founder @ <a href="http://www.jbug.com.ar" target="_blank">http://www.jbug.com.ar</a><br> <br> - Salatino &quot;Salaboy&quot; Mauricio -</div>
<br>