<span class="ul-threaded" style="margin: 0.5em 0pt 0pt -15px;"><span class="connect "><span id="li90099" class="li-threaded"><span class="threaded"><span class="post-middle"><span id="post90099" style="display: block;">hello,
<br>im using drools 5.0 on eclipse and i have a problem. i want to use an array of object in my rule condition.
<br>now i try to explain:
<br>i have my java class with the array attribute
<br>-------------------------------------------------
<br>public static class Message {
<br><br> public numbers[] numbersArray;
<br><br>}
<br>--------------------------------------------
<br>and the numbers class that rapresent the objects contained in numbersArray
<br>----------------------------------------------
<br>public static class numbers
<br>{
<br> public int first;
<br> public int last;
<br>}
<br>--------------------------------------------------
<br>my goal is make a rule that check if Message.numbersArray[0].first="value"
<br>i use
<br>-------------------------------------------------
<br>rule "rule_001"
<br><br>dialect "mvel"
<br>when
<br> $msg : Message(numbersArray[0].first=="1")
<br><br>then
<br> System.out.println("something....");
<br>end
<br>-------------------------------
<br>and on runtime it give me this error:
<br>---------------------------------------
<br>org.drools.RuntimeDroolsException: Exception executing predicate numbersArray[0].first=="1"
<br> at org.drools.rule.PredicateConstraint.isAllowed(PredicateConstraint.java:279)
<br> at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:143)
<br> at org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:360)
<br> at org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:344)
<br> at org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:185)
<br> at org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:146)
<br> at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:1046)
<br> at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:1001)
<br> at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:788)
<br> at org.drools.impl.StatefulKnowledgeSessionImpl.insert(StatefulKnowledgeSessionImpl.java:216)
<br> at com.sample.DroolsTest.main(DroolsTest.java:47)
<br>Caused by: [Error: unable to access property (null parent): first]
<br>[Near : {... Unknown ....}]
<br> ^
<br>[Line: 1, Column: 0]
<br> at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getMethod(ReflectiveAccessorOptimizer.java:861)
<br> at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getBeanProperty(ReflectiveAccessorOptimizer.java:585)
<br> at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:313)
<br> at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.optimizeAccessor(ReflectiveAccessorOptimizer.java:138)
<br> at org.mvel2.ast.ASTNode.getReducedValueAccelerated(ASTNode.java:133)
<br> at org.mvel2.ast.BinaryOperation.getReducedValueAccelerated(BinaryOperation.java:102)
<br> at org.mvel2.MVELRuntime.execute(MVELRuntime.java:85)
<br> at org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:107)
<br> at org.mvel2.MVEL.executeExpression(MVEL.java:978)
<br> at org.drools.base.mvel.MVELPredicateExpression.evaluate(MVELPredicateExpression.java:75)
<br> at org.drools.rule.PredicateConstraint.isAllowed(PredicateConstraint.java:272)
<br> ... 10 more
<br>-------------------------------------------------------
<br>moreover if i try to print the "first" value:
<br>.
<br>.
<br>.
<br>then
<br> System.out.println(numbersArray[0].first);
<br>end
<br>appear this new error and i cant compile:
<br>"BuildError: Unable to build expression for 'consequence': Failed to compile: 1 compilation error(s):
<br> - (1,12) unqualified type in strict mode for: numbersArray'                System.out.println(numbersArray[0].first);
<br>'"
<br><br>someone can kindly help me?
</span></span></span></span></span></span>