[jboss-jira] [JBoss JIRA] Updated: (JBRULES-2527) NullPointerException during rule compilation on entry.getValue().getExtractor().getExtractToClass() instead of clear, understandable compiler error because the getter doesn't exist

Geoffrey De Smet (JIRA) jira-events at lists.jboss.org
Sun May 30 08:06:08 EDT 2010


     [ https://jira.jboss.org/browse/JBRULES-2527?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Geoffrey De Smet updated JBRULES-2527:
--------------------------------------

        Summary: NullPointerException during rule compilation on entry.getValue().getExtractor().getExtractToClass() instead of clear, understandable compiler error because the getter doesn't exist  (was: NullPointerException during rule compilation on entry.getValue().getExtractor().getExtractToClass() instead of clear, understandable compiler error)
    Description: 
When adding this rule, I got a NullPointerException:

rule "myRule"
    when
        MyFact(
            ...
            $myVariable : wrongGetterName
        )
        ...
end


It crashes in
  PatternBuilder.getDeclarationsMap(PatternBuilder.java:666) (With that line number it must be evil! :))
on this line:
  declarations.put( entry.getKey(),
                              entry.getValue().getExtractor().getExtractToClass() );
and in debug it shows that
  entry.getValue() is $myVariable
and that
  entry.getValue().getExtractor() is null
which makes .getExtractToClass() give the NPE

It turns out that MyFact.getWrongGetterName() doesn't exist (it should be MyFact.getCorrectGetterName()).

Exception in thread "main" java.lang.NullPointerException
	at org.drools.rule.builder.PatternBuilder.getDeclarationsMap(PatternBuilder.java:666)
	at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:599)
	at org.drools.rule.builder.PatternBuilder.buildConstraint(PatternBuilder.java:269)
	at org.drools.rule.builder.PatternBuilder.buildConstraint(PatternBuilder.java:294)
	at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:213)
	at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:108)
	at org.drools.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:69)
	at org.drools.rule.builder.RuleBuilder.build(RuleBuilder.java:79)
	at org.drools.compiler.PackageBuilder.addRule(PackageBuilder.java:1142)
	at org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:628)
	at org.drools.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:252)
	at org.drools.planner.config.localsearch.LocalSearchSolverConfig.buildRuleBase(LocalSearchSolverConfig.java:193)
	at org.drools.planner.config.localsearch.LocalSearchSolverConfig.buildSolver(LocalSearchSolverConfig.java:170)
	at org.drools.planner.config.XmlSolverConfigurer.buildSolver(XmlSolverConfigurer.java:77)
	at org.drools.planner.examples.nurserostering.app.NurseRosteringApp.createSolver(NurseRosteringApp.java:31)
	at org.drools.planner.examples.common.app.CommonApp.createSolutionBusiness(CommonApp.java:43)
	at org.drools.planner.examples.common.app.CommonApp.<init>(CommonApp.java:22)
	at org.drools.planner.examples.nurserostering.app.NurseRosteringApp.<init>(NurseRosteringApp.java:18)
	at org.drools.planner.examples.nurserostering.app.NurseRosteringApp.main(NurseRosteringApp.java:24)
	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 com.intellij.rt.execution.application.AppMain.main(AppMain.java:110)

  was:
When adding this rule, I got a NullPointerException:

rule "unwantedPatternShiftType2DaysPattern"
    when
        $pattern : ShiftType2DaysPattern(
            $startDayOfWeek : startDayOfWeek,
            $dayIndex0shiftType : dayIndex0shiftType,
            $dayIndex1shiftType : dayIndex1shiftType
        )
        PatternContractLine(
            pattern == $pattern, $contract : contract
        )

        Assignment(
            eval(null == $dayIndex0shiftType) || (shiftType == $dayIndex0shiftType),
            contract == $contract, shiftDateDayOfWeek == $startDayOfWeek,
            $employee : employee, $firstDayIndex : shiftDateDayIndex
        )
        Assignment(
            eval(null == $dayIndex1shiftType) || (shiftType == $dayIndex1shiftType),
            employee == $employee,
            shiftDateDayIndex == ($firstDayIndex + 1)
        )
    then
        insertLogical(new IntConstraintOccurrence("unwantedPattern", ConstraintType.NEGATIVE_SOFT,
                $pattern.getWeight(),
                $employee, $pattern, $firstDayIndex));
end


It crashes on this line:
declarations.put( entry.getKey(),
                              entry.getValue().getExtractor().getExtractToClass() );
and in debug it shows that
  entry.getValue() is $dayIndex1shiftType
and that
  entry.getValue().getExtractor() is null
which makes .getExtractToClass() give the NPE


Exception in thread "main" java.lang.NullPointerException
	at org.drools.rule.builder.PatternBuilder.getDeclarationsMap(PatternBuilder.java:666)
	at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:599)
	at org.drools.rule.builder.PatternBuilder.buildConstraint(PatternBuilder.java:269)
	at org.drools.rule.builder.PatternBuilder.buildConstraint(PatternBuilder.java:294)
	at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:213)
	at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:108)
	at org.drools.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:69)
	at org.drools.rule.builder.RuleBuilder.build(RuleBuilder.java:79)
	at org.drools.compiler.PackageBuilder.addRule(PackageBuilder.java:1142)
	at org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:628)
	at org.drools.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:252)
	at org.drools.planner.config.localsearch.LocalSearchSolverConfig.buildRuleBase(LocalSearchSolverConfig.java:193)
	at org.drools.planner.config.localsearch.LocalSearchSolverConfig.buildSolver(LocalSearchSolverConfig.java:170)
	at org.drools.planner.config.XmlSolverConfigurer.buildSolver(XmlSolverConfigurer.java:77)
	at org.drools.planner.examples.nurserostering.app.NurseRosteringApp.createSolver(NurseRosteringApp.java:31)
	at org.drools.planner.examples.common.app.CommonApp.createSolutionBusiness(CommonApp.java:43)
	at org.drools.planner.examples.common.app.CommonApp.<init>(CommonApp.java:22)
	at org.drools.planner.examples.nurserostering.app.NurseRosteringApp.<init>(NurseRosteringApp.java:18)
	at org.drools.planner.examples.nurserostering.app.NurseRosteringApp.main(NurseRosteringApp.java:24)
	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 com.intellij.rt.execution.application.AppMain.main(AppMain.java:110)



> NullPointerException during rule compilation on entry.getValue().getExtractor().getExtractToClass() instead of clear, understandable compiler error because the getter doesn't exist
> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: JBRULES-2527
>                 URL: https://jira.jboss.org/browse/JBRULES-2527
>             Project: Drools
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>          Components: drools-compiler (expert)
>    Affects Versions: 5.1.0.M2
>            Reporter: Geoffrey De Smet
>            Assignee: Edson Tirelli
>            Priority: Minor
>             Fix For: FUTURE
>
>
> When adding this rule, I got a NullPointerException:
> rule "myRule"
>     when
>         MyFact(
>             ...
>             $myVariable : wrongGetterName
>         )
>         ...
> end
> It crashes in
>   PatternBuilder.getDeclarationsMap(PatternBuilder.java:666) (With that line number it must be evil! :))
> on this line:
>   declarations.put( entry.getKey(),
>                               entry.getValue().getExtractor().getExtractToClass() );
> and in debug it shows that
>   entry.getValue() is $myVariable
> and that
>   entry.getValue().getExtractor() is null
> which makes .getExtractToClass() give the NPE
> It turns out that MyFact.getWrongGetterName() doesn't exist (it should be MyFact.getCorrectGetterName()).
> Exception in thread "main" java.lang.NullPointerException
> 	at org.drools.rule.builder.PatternBuilder.getDeclarationsMap(PatternBuilder.java:666)
> 	at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:599)
> 	at org.drools.rule.builder.PatternBuilder.buildConstraint(PatternBuilder.java:269)
> 	at org.drools.rule.builder.PatternBuilder.buildConstraint(PatternBuilder.java:294)
> 	at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:213)
> 	at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:108)
> 	at org.drools.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:69)
> 	at org.drools.rule.builder.RuleBuilder.build(RuleBuilder.java:79)
> 	at org.drools.compiler.PackageBuilder.addRule(PackageBuilder.java:1142)
> 	at org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:628)
> 	at org.drools.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:252)
> 	at org.drools.planner.config.localsearch.LocalSearchSolverConfig.buildRuleBase(LocalSearchSolverConfig.java:193)
> 	at org.drools.planner.config.localsearch.LocalSearchSolverConfig.buildSolver(LocalSearchSolverConfig.java:170)
> 	at org.drools.planner.config.XmlSolverConfigurer.buildSolver(XmlSolverConfigurer.java:77)
> 	at org.drools.planner.examples.nurserostering.app.NurseRosteringApp.createSolver(NurseRosteringApp.java:31)
> 	at org.drools.planner.examples.common.app.CommonApp.createSolutionBusiness(CommonApp.java:43)
> 	at org.drools.planner.examples.common.app.CommonApp.<init>(CommonApp.java:22)
> 	at org.drools.planner.examples.nurserostering.app.NurseRosteringApp.<init>(NurseRosteringApp.java:18)
> 	at org.drools.planner.examples.nurserostering.app.NurseRosteringApp.main(NurseRosteringApp.java:24)
> 	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 com.intellij.rt.execution.application.AppMain.main(AppMain.java:110)

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

        


More information about the jboss-jira mailing list