[jboss-jira] [JBoss JIRA] (DROOLS-687) Helpful error message for MvelConstraint

Toshiya Kobayashi (JIRA) issues at jboss.org
Thu Jan 15 05:36:49 EST 2015


Toshiya Kobayashi created DROOLS-687:
----------------------------------------

             Summary: 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: Mark Proctor


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.




--
This message was sent by Atlassian JIRA
(v6.3.11#6341)


More information about the jboss-jira mailing list