]
RH Bugzilla Integration commented on DROOLS-687:
------------------------------------------------
Marek Winkler <mwinkler(a)redhat.com> changed the Status of [bug
Helpful error message for MvelConstraint
----------------------------------------
Key: DROOLS-687
URL:
https://issues.jboss.org/browse/DROOLS-687
Project: Drools
Issue Type: Enhancement
Affects Versions: 6.2.0.CR4
Reporter: Toshiya Kobayashi
Assignee: Mario Fusco
Priority: Critical
Fix For: 6.2.0.Final
When you hit NullPointerException with LHS constraint during runtime, the error message
is not very helpful for users to detect the root cause.
For example,
{noformat}
rule 'hello person'
when
Person( address.street == 'abbey' )
then
end
{noformat}
If Person.address is null, the error message is:
{noformat}
[Error: null pointer: address.street]
[Near : {... address.street == "abbey" ....}]
^
[Line: 1, Column: 1]
at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:427)
at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.optimizeAccessor(ReflectiveAccessorOptimizer.java:140)
at org.mvel2.ast.ASTNode.optimize(ASTNode.java:159)
at org.mvel2.ast.ASTNode.getReducedValueAccelerated(ASTNode.java:115)
at org.mvel2.ast.BinaryOperation.getReducedValueAccelerated(BinaryOperation.java:117)
at org.mvel2.MVELRuntime.execute(MVELRuntime.java:86)
at org.mvel2.compiler.CompiledExpression.getDirectValue(CompiledExpression.java:123)
at org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:119)
at org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:113)
at org.mvel2.MVEL.executeExpression(MVEL.java:930)
at
org.drools.core.util.MVELSafeHelper$RawMVELEvaluator.executeExpression(MVELSafeHelper.java:481)
at
org.drools.core.rule.constraint.MvelConditionEvaluator.evaluate(MvelConditionEvaluator.java:77)
at
org.drools.core.rule.constraint.MvelConditionEvaluator.evaluate(MvelConditionEvaluator.java:62)
at org.drools.core.rule.constraint.MvelConstraint.evaluate(MvelConstraint.java:226)
at org.drools.core.rule.constraint.MvelConstraint.isAllowed(MvelConstraint.java:183)
at org.drools.core.reteoo.AlphaNode.assertObject(AlphaNode.java:138)
at
org.drools.core.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:60)
at org.drools.core.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:290)
at org.drools.core.reteoo.EntryPointNode.assertObject(EntryPointNode.java:253)
at org.drools.core.common.NamedEntryPoint.insert(NamedEntryPoint.java:281)
at org.drools.core.common.NamedEntryPoint.insert(NamedEntryPoint.java:241)
at
org.drools.core.impl.StatefulKnowledgeSessionImpl.insert(StatefulKnowledgeSessionImpl.java:1481)
at
org.drools.core.impl.StatefulKnowledgeSessionImpl.insert(StatefulKnowledgeSessionImpl.java:1436)
at
org.drools.compiler.integrationtests.Misc2Test.testMvelConstraintErrorMessage(Misc2Test.java:7086)
...
Caused by: java.lang.NullPointerException
at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:393)
... 46 more
{noformat}
Users cannot identify which rule is associated with the constraint when they have many
similar rules. Also users cannot identify which fact (Person) caused the issue when they
insert many facts.
I'm not sure if it's really possible to provide a better message in this case.
But I filed this as an enhancement request.