[jboss-jira] [JBoss JIRA] Commented: (JBRULES-3097) [regression from 5.2.0.M1] Exception on RHS method call with null argument
Richard Calmbach (JIRA)
jira-events at lists.jboss.org
Fri Jun 24 15:28:23 EDT 2011
[ https://issues.jboss.org/browse/JBRULES-3097?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12611037#comment-12611037 ]
Richard Calmbach commented on JBRULES-3097:
-------------------------------------------
With Drools 5.2.0.Final, this bug just went from bad to worse. Here is why: Just by upgrading from Drools 5.2.0.M1 to 5.2.0.Final, I can get 15 of my unit tests to fail. However, the above exception and stacktrace that provide the hint about the problem with the null argument NO LONGER APPEARS, i.e., with 5.2.0.Final, there is not even an indication as to where the problem is coming from!
When I call the 2-parameter version of the helper method (i.e., no null argument):
public void methodWith2Parameters(Record record, Long id) {
methodWith3Parameters(record, id, null);
}
and update the jMock expectations accordingly, all unit tests pass again. But I would never know that from the 5.2.0.Final symptoms alone.
So, this bug is still present in Drools 5.2.0.Final, it's just even harder to track down, now.
> [regression from 5.2.0.M1] Exception on RHS method call with null argument
> --------------------------------------------------------------------------
>
> Key: JBRULES-3097
> URL: https://issues.jboss.org/browse/JBRULES-3097
> Project: Drools
> Issue Type: Bug
> Security Level: Public(Everyone can see)
> Components: drools-core
> Affects Versions: 5.2.0.CR1
> Reporter: Richard Calmbach
> Assignee: Mark Proctor
>
> At some point after Drools 5.2.0.M1, a bug was introduced that causes RHS method calls with a null argument to throw an exception at runtime. The exception does not happen with a non-null argument.
> This still worked in Drools 5.2.0.M1 but breaks in Drools 5.2.0.CR1:
> dialect "mvel"
> rule "ruleA"
> when
> <lhs> (assigns $record, $id)
> then
> helper.methodWith3Parameters($record, $id, null);
> end
> Drools 5.2.0.CR1 throws the following exception at runtime (names sanitized). Note the missing third argument in the "unable to resolve method" error message:
> org.drools.runtime.rule.ConsequenceException: rule: ruleA
> at org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39)
> at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:915)
> at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:844)
> at org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1055)
> at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:733)
> at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:699)
> at org.drools.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:218)
> at com.example.KnowledgeSessionGatewayImpl.insertEventA(KnowledgeSessionGatewayImpl.java:48)
> at com.example.KnowledgeSessionGatewayImpl.receive(KnowledgeSessionGatewayImpl.java:74)
> at com.example.events.EventFeeder$FeedJob.execute(EventFeeder.java:58)
> at org.drools.time.impl.PseudoClockScheduler$ScheduledJob.call(PseudoClockScheduler.java:227)
> at org.drools.time.impl.PseudoClockScheduler.runCallBacks(PseudoClockScheduler.java:176)
> at org.drools.time.impl.PseudoClockScheduler.advanceTime(PseudoClockScheduler.java:127)
> at com.example.RulesTestBase.advanceTime(RulesTestBase.java:140)
> at com.example.RulesTestBase.advanceTime(RulesTestBase.java:152)
> at com.example.Rules2Test.testScenarioA(Rules2Test.java:280)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:66)
> at org.jmock.integration.junit4.JMock$1.invoke(JMock.java:37)
> at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:105)
> at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:86)
> at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:94)
> at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:84)
> at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49)
> at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:98)
> at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:61)
> at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:54)
> at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34)
> at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44)
> at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:52)
> at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
> at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
> Caused by: [Error: unable to resolve method: $Proxy10.methodWith3Parameters(com.example.Record, java.lang.Long, ) [arglength=3]]
> [Near : {... System.out.println("Rule {" + ....}]
> ^
> [Line: 1, Column: 1]
> at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getMethod(ReflectiveAccessorOptimizer.java:1042)
> at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:339)
> at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.optimizeAccessor(ReflectiveAccessorOptimizer.java:141)
> at org.mvel2.optimizers.dynamic.DynamicOptimizer.optimizeAccessor(DynamicOptimizer.java:67)
> at org.mvel2.ast.ASTNode.optimize(ASTNode.java:161)
> at org.mvel2.ast.ASTNode.getReducedValueAccelerated(ASTNode.java:117)
> at org.mvel2.MVELRuntime.execute(MVELRuntime.java:87)
> at org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:125)
> at org.mvel2.MVEL.executeExpression(MVEL.java:960)
> at org.drools.base.mvel.MVELConsequence.evaluate(MVELConsequence.java:105)
> at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:905)
> ... 37 more
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list