-
Bug
-
Resolution: Done
-
Major
-
None
-
None
-
2020 Week 13-15 (from Mar 23)
-
2
-
NEW
-
NEW
Reported by Duncan.
Uses 7.35.0 (= latest release).
The setWorkingSolution() method recently does a assertNull check, but not sure if that's there in 7.35.
In any case, it happens during the resetWorkingSolution() - at which point it looks like the workingSolution is null, which make ConstraintWeight fail.
If workingSolution is indeed null at that point and that reproducer don't do any very dirty hack in our code, this should fail sooner, with a decent error message that states that the workingSolution is null (or better).
Stacktrace:
java.lang.NullPointerException: null at java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:57) ~[na:na] at java.base/jdk.internal.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:36) ~[na:na] at java.base/java.lang.reflect.Field.get(Field.java:418) ~[na:na] at org.optaplanner.core.impl.domain.common.accessor.ReflectionFieldMemberAccessor.executeGetter(ReflectionFieldMemberAccessor.java:59) ~[optaplanner-core-7.35.0.Final.jar!/:7.35.0.Final] at org.optaplanner.core.impl.domain.constraintweight.descriptor.ConstraintWeightDescriptor.lambda$createExtractor$0(ConstraintWeightDescriptor.java:82) ~[optaplanner-core-7.35.0.Final.jar!/:7.35.0.Final] at org.optaplanner.core.impl.score.director.drools.DroolsScoreDirector.lambda$resetScoreHolder$0(DroolsScoreDirector.java:88) ~[optaplanner-core-7.35.0.Final.jar!/:7.35.0.Final] at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:684) ~[na:na] at org.optaplanner.core.impl.score.director.drools.DroolsScoreDirector.resetScoreHolder(DroolsScoreDirector.java:86) ~[optaplanner-core-7.35.0.Final.jar!/:7.35.0.Final] at org.optaplanner.core.impl.score.director.drools.DroolsScoreDirector.resetKieSession(DroolsScoreDirector.java:76) ~[optaplanner-core-7.35.0.Final.jar!/:7.35.0.Final] at org.optaplanner.core.impl.score.director.drools.DroolsScoreDirector.setWorkingSolution(DroolsScoreDirector.java:67) ~[optaplanner-core-7.35.0.Final.jar!/:7.35.0.Final] at org.optaplanner.core.impl.solver.scope.DefaultSolverScope.setWorkingSolutionFromBestSolution(DefaultSolverScope.java:218) ~[optaplanner-core-7.35.0.Final.jar!/:7.35.0.Final] at org.optaplanner.core.impl.solver.AbstractSolver.solvingStarted(AbstractSolver.java:79) ~[optaplanner-core-7.35.0.Final.jar!/:7.35.0.Final] at org.optaplanner.core.impl.solver.DefaultSolver.solvingStarted(DefaultSolver.java:208) ~[optaplanner-core-7.35.0.Final.jar!/:7.35.0.Final] at org.optaplanner.core.impl.solver.DefaultSolver.solve(DefaultSolver.java:188) ~[optaplanner-core-7.35.0.Final.jar!/:7.35.0.Final] at org.optaplanner.core.impl.solver.DefaultSolverJob.call(DefaultSolverJob.java:95) ~[optaplanner-core-7.35.0.Final.jar!/:7.35.0.Final] at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na] at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
Reproducer:
- Start this:
https://github.com/DuncanDoyle/optaplanner-npe - Send this requrest
{ "knapsack": { "maxWeight": 10 }, "ingots" : [ { "weight": 4, "value": 15 }, { "weight": 4, "value": 15 }, { "weight": 3, "value": 12 }, { "weight": 3, "value": 12 }, { "weight": 3, "value": 12 }, { "weight": 2, "value": 7 }, { "weight": 2, "value": 7 }, { "weight": 2, "value": 7 }, { "weight": 2, "value": 7 }, { "weight": 2, "value": 7 } ] }