[jboss-jira] [JBoss JIRA] Created: (JBRULES-2267) NullPointerException would be thrown during rule execution

Freddy Andersen (JIRA) jira-events at lists.jboss.org
Thu Sep 3 17:08:23 EDT 2009


NullPointerException would be thrown during rule execution
----------------------------------------------------------

                 Key: JBRULES-2267
                 URL: https://jira.jboss.org/jira/browse/JBRULES-2267
             Project: Drools
          Issue Type: Bug
      Security Level: Public (Everyone can see)
          Components: All
    Affects Versions: 5.0.1.FINAL
         Environment: Drools version: 5.0.1
JDK version: 1.5.0_6 
            Reporter: Freddy Andersen
            Assignee: Mark Proctor
             Fix For: 5.0.1.FINAL


NullPointerException would be thrown during rule execution when the following conditions were met:

1. The org.drools.rule.Package instances should be serialized/de-serialized before being added to the RuleBase.
2. The de-serialized package instances should be added to a RuleBase - all the packages have the same package name.
3. At least one of the rules in the packages (not in the first package to be added to the RulBase; it would work fine while in the
first package) should contain an IN, or NOT IN operator. 



Our investigation revealed the followings:

* One of the object field, ClassFieldReader. reader which is defined as transient, was let null when the package's were added to the RuleBase.
* It became null because the parent package has been serialized/de-serialized.
* It was not properly re-wired during the package merging when adding the package(s) to the RuleBase.
* It only happens to the conditions/fields when IN or NOT IN was used. In other words, when a MultiRestrictionFieldConstraint was used.
* The correct ReadAccessor was correctly set to instances of MultiRestrictionFieldConstraint in ClassFieldAccessorStore.merge, and
the instance of ReadAccessor was propagated throw restrictions, such as OrCompositeRestriction during rule execution. The issue is that the
leaf restrictions, such as LiteralRestriction, would only use their own ReadAccessor, not the one passed in, when evaluating isAllowed. Since
it's own ReadAccessor was not properly re-set, meaning the field reader is null in this case, a NullPointerException would occur.


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jboss-jira mailing list