[jboss-jira] [JBoss JIRA] Commented: (JBRULES-459) Literal constraint using 'null' triggers a NPE.
Serge Brisson (JIRA)
jira-events at jboss.com
Wed Aug 30 11:59:43 EDT 2006
[ http://jira.jboss.com/jira/browse/JBRULES-459?page=comments#action_12342362 ]
Serge Brisson commented on JBRULES-459:
---------------------------------------
After further investigation, I can tell you that before the NPE, Result.getValue() has been called twice for the same Result instance, returning a null value each time.
Stack trace of the first call:
at org.rvpf.rules.BasicResult.getValue(BasicResult.java:92)
at org.drools.base.org.rvpf.rules.Result$getValue.getValue(Unknown Source)
at org.drools.base.ClassFieldExtractor.getValue(Unknown Source)
at org.drools.reteoo.AlphaNodeSwitch.getNode(Unknown Source)
at org.drools.reteoo.HashedObjectSinkList$1.hasNext(Unknown Source)
at org.drools.reteoo.ObjectSource.propagateAssertObject(Unknown Source)
at org.drools.reteoo.ObjectTypeNode.assertObject(Unknown Source)
at org.drools.reteoo.Rete.assertObject(Unknown Source)
at org.drools.reteoo.ReteooRuleBase.assertObject(Unknown Source)
at org.drools.reteoo.ReteooWorkingMemory.doAssertObject(Unknown Source)
at org.drools.common.AbstractWorkingMemory.assertObject(Unknown Source)
at org.drools.common.AbstractWorkingMemory.assertObject(Unknown Source)
at org.drools.jsr94.rules.StatelessRuleSessionImpl.executeRules(Unknown Source)
at org.drools.jsr94.rules.StatelessRuleSessionImpl.executeRules(Unknown Source)
at org.rvpf.rules.ServiceProviderTests.testStatelessSession(ServiceProviderTests.java:132)
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:585)
at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:552)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:411)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:785)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:114)
at org.testng.TestRunner.privateRun(TestRunner.java:695)
at org.testng.TestRunner.run(TestRunner.java:574)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:241)
at org.testng.SuiteRunner.run(SuiteRunner.java:145)
at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:901)
at org.testng.TestNG.runSuitesLocally(TestNG.java:863)
at org.testng.TestNG.run(TestNG.java:613)
at org.rvpf.tests.FrameworkTests.main(FrameworkTests.java:132)
Stack trace of the second call:
at org.rvpf.rules.BasicResult.getValue(BasicResult.java:92)
at org.drools.base.org.rvpf.rules.Result$getValue.getValue(Unknown Source)
at org.drools.base.ClassFieldExtractor.getValue(Unknown Source)
at org.drools.rule.LiteralConstraint.isAllowed(Unknown Source)
at org.drools.reteoo.AlphaNode.assertObject(Unknown Source)
at org.drools.reteoo.ObjectSource.propagateAssertObject(Unknown Source)
at org.drools.reteoo.ObjectTypeNode.assertObject(Unknown Source)
at org.drools.reteoo.Rete.assertObject(Unknown Source)
at org.drools.reteoo.ReteooRuleBase.assertObject(Unknown Source)
at org.drools.reteoo.ReteooWorkingMemory.doAssertObject(Unknown Source)
at org.drools.common.AbstractWorkingMemory.assertObject(Unknown Source)
at org.drools.common.AbstractWorkingMemory.assertObject(Unknown Source)
at org.drools.jsr94.rules.StatelessRuleSessionImpl.executeRules(Unknown Source)
at org.drools.jsr94.rules.StatelessRuleSessionImpl.executeRules(Unknown Source)
at org.rvpf.rules.ServiceProviderTests.testStatelessSession(ServiceProviderTests.java:132)
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:585)
at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:552)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:411)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:785)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:114)
at org.testng.TestRunner.privateRun(TestRunner.java:695)
at org.testng.TestRunner.run(TestRunner.java:574)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:241)
at org.testng.SuiteRunner.run(SuiteRunner.java:145)
at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:901)
at org.testng.TestNG.runSuitesLocally(TestNG.java:863)
at org.testng.TestNG.run(TestNG.java:613)
at org.rvpf.tests.FrameworkTests.main(FrameworkTests.java:132)
The NPE occurs after that.
> Literal constraint using 'null' triggers a NPE.
> -----------------------------------------------
>
> Key: JBRULES-459
> URL: http://jira.jboss.com/jira/browse/JBRULES-459
> Project: JBoss Rules
> Issue Type: Bug
> Security Level: Public(Everyone can see)
> Affects Versions: 3.0.4
> Environment: Windows XP SP2.
> Reporter: Serge Brisson
> Assigned To: Edson Tirelli
> Fix For: 3.0.5
>
>
> The following triggers the problem:
> rule "Drops null results"
> when
> $result: Result(value == null)
> then
> retract($result);
> end
> Stack trace:
> java.lang.NullPointerException
> at org.drools.base.evaluators.ArrayFactory$ArrayEqualEvaluator.evaluate(Unknown Source)
> at org.drools.rule.LiteralConstraint.isAllowed(Unknown Source)
> at org.drools.reteoo.AlphaNode.assertObject(Unknown Source)
> at org.drools.reteoo.ObjectSource.propagateAssertObject(Unknown Source)
> at org.drools.reteoo.ObjectTypeNode.assertObject(Unknown Source)
> at org.drools.reteoo.Rete.assertObject(Unknown Source)
> at org.drools.reteoo.ReteooRuleBase.assertObject(Unknown Source)
> at org.drools.reteoo.ReteooWorkingMemory.doAssertObject(Unknown Source)
> at org.drools.common.AbstractWorkingMemory.assertObject(Unknown Source)
> at org.drools.common.AbstractWorkingMemory.assertObject(Unknown Source)
> at org.drools.jsr94.rules.StatelessRuleSessionImpl.executeRules(Unknown Source)
> at org.drools.jsr94.rules.StatelessRuleSessionImpl.executeRules(Unknown Source)
> at org.rvpf.rules.ServiceProviderTests.testStatelessSession(ServiceProviderTests.java:130)
> 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:585)
> at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:552)
> at org.testng.internal.Invoker.invokeMethod(Invoker.java:411)
> at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:785)
> at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:114)
> at org.testng.TestRunner.privateRun(TestRunner.java:695)
> at org.testng.TestRunner.run(TestRunner.java:574)
> at org.testng.SuiteRunner.privateRun(SuiteRunner.java:241)
> at org.testng.SuiteRunner.run(SuiteRunner.java:145)
> at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:901)
> at org.testng.TestNG.runSuitesLocally(TestNG.java:863)
> at org.testng.TestNG.run(TestNG.java:613)
> at org.rvpf.tests.FrameworkTests.main(FrameworkTests.java:132)
> The following is a successful work-around:
> rule "Drops null results"
> when
> $result: Result()
> eval($result.getValue() == null)
> then
> retract($result);
> end
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list