Uploaded image for project: 'OptaPlanner'
  1. OptaPlanner
  2. PLANNER-1942

NPE without decent error message (turns out workingSolution is null)

XMLWordPrintable

      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:

      {
      	"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
      		}
      	]
      }
      

            lpetrovi@redhat.com Lukáš Petrovický (Inactive)
            gdesmet@redhat.com Geoffrey De Smet (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: