Exception executing predicate with binding variable and or predicate
--------------------------------------------------------------------
Key: JBRULES-2875
URL:
https://issues.jboss.org/browse/JBRULES-2875
Project: Drools
Issue Type: Bug
Security Level: Public (Everyone can see)
Components: drools-core
Affects Versions: 5.1.1.FINAL
Environment: Windows XP / DEBIAN / Eclipse 3.5.1
Reporter: alexandre alexandre
Assignee: Mark Proctor
Priority: Critical
Exception executing predicate with binding variable and or predicate
When I execute this kind of rule :
(where field id from Object Entity is an Integer.)
rule "test"
salience 20
when
(String() or Double())
$entity:Entity()
DroolsTest(entity.id == $entity.id )
then
System.out.println( "it works !" );
end
I got this exception :
Exception in thread "main" org.drools.RuntimeDroolsException: Exception
executing predicate entite.id == $entite.id
at org.drools.rule.PredicateConstraint.isAllowedCachedLeft(PredicateConstraint.java:302)
at
org.drools.common.SingleBetaConstraints.isAllowedCachedLeft(SingleBetaConstraints.java:142)
at org.drools.reteoo.JoinNode.assertLeftTuple(JoinNode.java:83)
at
org.drools.reteoo.SingleLeftTupleSinkAdapter.doPropagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:189)
at
org.drools.reteoo.SingleLeftTupleSinkAdapter.propagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:64)
at org.drools.reteoo.JoinNode.assertLeftTuple(JoinNode.java:85)
at
org.drools.reteoo.SingleLeftTupleSinkAdapter.doPropagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:189)
at
org.drools.reteoo.SingleLeftTupleSinkAdapter.createAndPropagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:138)
at org.drools.reteoo.LeftInputAdapterNode.assertObject(LeftInputAdapterNode.java:148)
at
org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:59)
at org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:190)
at org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:145)
at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:1174)
at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:1123)
at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:917)
at
org.drools.impl.StatefulKnowledgeSessionImpl.insert(StatefulKnowledgeSessionImpl.java:251)
at
com.agysoft.marco.tools.tuOneShot.marcometier.drools.DroolsTest.main(DroolsTest.java:57)
Caused by: [Error: unable to resolve method: java.lang.String.id() [arglength=0]]
[Near : {... Unknown ....}]
^
[Line: 1, Column: 0]
at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getMethod(ReflectiveAccessorOptimizer.java:932)
at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getBeanProperty(ReflectiveAccessorOptimizer.java:592)
at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:311)
at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.optimizeAccessor(ReflectiveAccessorOptimizer.java:137)
at org.mvel2.ast.ASTNode.getReducedValueAccelerated(ASTNode.java:137)
at org.mvel2.ast.BinaryOperation.getReducedValueAccelerated(BinaryOperation.java:111)
at org.mvel2.MVELRuntime.execute(MVELRuntime.java:85)
at org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:104)
at org.mvel2.MVEL.executeExpression(MVEL.java:1001)
at
org.drools.base.mvel.MVELPredicateExpression.evaluate(MVELPredicateExpression.java:91)
at org.drools.rule.PredicateConstraint.isAllowedCachedLeft(PredicateConstraint.java:295)
... 16 more
this rule Works :
rule "test"
salience 20
when
$entity:Entity()
DroolsTest(entity.id == $entity.id )
then
System.out.println( "it works !" );
end
this rule Works :
rule "test"
salience 20
when
(String() or Double())
$entity:Entity()
DroolsTest(entity.id == $entity.id )
then
System.out.println( "it works !" );
end
---------------------------------------------------------------------------------------------------
variant case with another Exception :
rule "test"
salience 20
when
(String() or Double())
Entite($entiteId:id)
DroolsTest(entite.id == $entiteId )
then
System.out.println( "it works !" );
end
throw this Exception Stack :
Exception in thread "main" org.drools.RuntimeDroolsException: Exception
executing predicate entite.id == $entiteId
at org.drools.rule.PredicateConstraint.isAllowedCachedLeft(PredicateConstraint.java:302)
at
org.drools.common.SingleBetaConstraints.isAllowedCachedLeft(SingleBetaConstraints.java:142)
at org.drools.reteoo.JoinNode.assertLeftTuple(JoinNode.java:83)
at
org.drools.reteoo.SingleLeftTupleSinkAdapter.doPropagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:189)
at
org.drools.reteoo.SingleLeftTupleSinkAdapter.propagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:64)
at org.drools.reteoo.JoinNode.assertLeftTuple(JoinNode.java:85)
at
org.drools.reteoo.SingleLeftTupleSinkAdapter.doPropagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:189)
at
org.drools.reteoo.SingleLeftTupleSinkAdapter.createAndPropagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:138)
at org.drools.reteoo.LeftInputAdapterNode.assertObject(LeftInputAdapterNode.java:148)
at
org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:59)
at org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:190)
at org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:145)
at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:1174)
at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:1123)
at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:917)
at
org.drools.impl.StatefulKnowledgeSessionImpl.insert(StatefulKnowledgeSessionImpl.java:251)
at
com.agysoft.marco.tools.tuOneShot.marcometier.drools.DroolsTest.main(DroolsTest.java:57)
Caused by: [Error: java.lang.String cannot be cast to
com.agysoft.marco.tools.tuOneShot.marcometier.drools.Entite]
[Near : {... Unknown ....}]
^
[Line: 1, Column: 0]
at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:387)
at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.optimizeAccessor(ReflectiveAccessorOptimizer.java:137)
at org.mvel2.ast.ASTNode.getReducedValueAccelerated(ASTNode.java:137)
at org.mvel2.ast.BinaryOperation.getReducedValueAccelerated(BinaryOperation.java:111)
at org.mvel2.MVELRuntime.execute(MVELRuntime.java:85)
at org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:104)
at org.mvel2.MVEL.executeExpression(MVEL.java:1001)
at
org.drools.base.mvel.MVELPredicateExpression.evaluate(MVELPredicateExpression.java:91)
at org.drools.rule.PredicateConstraint.isAllowedCachedLeft(PredicateConstraint.java:295)
... 16 more
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to
com.agysoft.marco.tools.tuOneShot.marcometier.drools.Entite
at
org.drools.base.com.agysoft.marco.tools.tuOneShot.marcometier.drools.Entite4694228$getId.getIntValue(Unknown
Source)
at
org.drools.base.extractors.BaseIntClassFieldReader.getValue(BaseIntClassFieldReader.java:52)
at org.drools.base.ClassFieldReader.getValue(ClassFieldReader.java:91)
at org.drools.rule.Declaration.getValue(Declaration.java:228)
at
org.drools.base.mvel.DroolsMVELPreviousDeclarationVariable.getValue(DroolsMVELPreviousDeclarationVariable.java:83)
at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getBeanProperty(ReflectiveAccessorOptimizer.java:454)
at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:311)
... 24 more
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira