Search code examples
javaoptaplanner

optaplanner-examples: Unmarshalling of solverConfigResource


I cloned from git the optaplanner-examples to learn how I can implement the library for my problem case.

I modify the example PassionAdmissionSchedule and I want only the code without swing. When I want to start the solver, I get the fllowing error message.

Exception in thread "main" java.lang.IllegalArgumentException: Unmarshalling of solverConfigResource (test/patientAdmissionScheduleSolverConfig.xml) fails.
at org.optaplanner.core.impl.solver.XStreamXmlSolverFactory.configure(XStreamXmlSolverFactory.java:114)
at org.optaplanner.core.api.solver.SolverFactory.createFromXmlResource(SolverFactory.java:90)
at test.PatientAdmissionScheduleApp.init(PatientAdmissionScheduleApp.java:29)
at test.PatientAdmissionScheduleApp.main(PatientAdmissionScheduleApp.java:24)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: com.thoughtworks.xstream.converters.ConversionException: Cannot load java class 
                test.BedDesignationPillarPartSwapMoveFactory

---- Debugging information ----
message             : Cannot load java class 
test.BedDesignationPillarPartSwapMoveFactory

class               : java.lang.Class
required-type       : java.lang.Class
converter-type      : com.thoughtworks.xstream.converters.SingleValueConverterWrapper
wrapped-converter   : com.thoughtworks.xstream.converters.extended.JavaClassConverter
line number         : 25
class[1]            : org.optaplanner.core.config.heuristic.selector.move.factory.MoveListFactoryConfig
converter-type[1]   : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
class[2]            : org.optaplanner.core.config.heuristic.selector.move.composite.UnionMoveSelect    orConfig
class[3]            : org.optaplanner.core.config.localsearch.LocalSearchPhaseConfig
class[4]            : org.optaplanner.core.config.solver.SolverConfig
version             : 1.4.9
-------------------------------

The solver config is the same.

<?xml version="1.0" encoding="UTF-8"?>
<solver>
<!--<environmentMode>FAST_ASSERT</environmentMode>-->
<solutionClass>test.PatientAdmissionSchedule</solutionClass>
<entityClass>test.BedDesignation</entityClass>

<scoreDirectorFactory>
    <scoreDrl>patientAdmissionScheduleScoreRules.drl</scoreDrl>
</scoreDirectorFactory>

<termination>
    <secondsSpentLimit>300</secondsSpentLimit>
</termination>
<constructionHeuristic>
    <constructionHeuristicType>WEAKEST_FIT_DECREASING</constructionHeuristicType>
</constructionHeuristic>
<localSearch>
    <unionMoveSelector>
        <changeMoveSelector/>
        <!--<swapMoveSelector/>-->
        <!--<pillarSwapMoveSelector/>-->
        <moveListFactory>
            <moveListFactoryClass>
                test.BedDesignationPillarPartSwapMoveFactory
            </moveListFactoryClass>
        </moveListFactory>
    </unionMoveSelector>
    <acceptor>
        <entityTabuSize>7</entityTabuSize>
    </acceptor>
    <forager>
        <acceptedCountLimit>1000</acceptedCountLimit>
    </forager>
</localSearch>

The error message says, that java can't load the class BedDesignationPillarSwapMoveFactory, but why?


Solution

  • line number : 25

    Check line number 25 of your solver config XML.

    This is not valid:

            <moveListFactoryClass>
                test.BedDesignationPillarPartSwapMoveFactory
            </moveListFactoryClass>
    

    This is valid:

            <moveListFactoryClass>test.BedDesignationPillarPartSwapMoveFactory</moveListFactoryClass>
    

    Presume that there is a java package test with that class in that package.