Uploaded image for project: 'Drools'
  1. Drools
  2. DROOLS-687

Helpful error message for MvelConstraint

    XMLWordPrintable

Details

    • Enhancement
    • Resolution: Done
    • Critical
    • 6.2.0.Final
    • 6.2.0.CR4
    • None
    • None

    Description

      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,

      rule 'hello person'
         when
             Person( address.street == 'abbey' )
         then
      end
      

      If Person.address is null, the error message is:

      [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
      

      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.

      Attachments

        Activity

          People

            mfusco@redhat.com Mario Fusco
            rhn-support-tkobayas Toshiya Kobayashi
            Votes:
            1 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: