2017-03-03 5 views
0

Ich habe aus den Optaplanner-Beispielen geklont, um zu erfahren, wie ich die Bibliothek für meinen Problemfall implementieren kann.optaplanner-Beispiele: Unmarshalling von solverConfigResource

Ich modifiziere das Beispiel PassionAdmissionSchedule und ich möchte nur den Code ohne Swing. Wenn ich den Solver starten möchte, erhalte ich die folgende Fehlermeldung.

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 
------------------------------- 

Die Solver-Konfiguration ist die gleiche.

<?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> 

Die Fehlermeldung sagt, kann man erkennen, Java nicht die Klasse BedDesignationPillarSwapMoveFactory laden, aber warum?

Antwort

0

Zeilennummer: 25

prüfen Zeilennummer 25 Ihrer Solver Config XML.

Dies ist nicht gültig:

 <moveListFactoryClass> 
      test.BedDesignationPillarPartSwapMoveFactory 
     </moveListFactoryClass> 

Dies gilt:

 <moveListFactoryClass>test.BedDesignationPillarPartSwapMoveFactory</moveListFactoryClass> 

davon aus, dass es einen in diesem Paket java-Paket Test mit dieser Klasse ist.