[
https://jira.jboss.org/browse/JBRULES-2527?page=com.atlassian.jira.plugin...
]
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