2016-05-25 11 views
1

Ich versuche, eine Benchmark-Konfiguration in meinem Projekt zu implementieren, und was auch immer ich tue, es scheint mir ein Fehler zu passieren. Nach einigen Lesevorgängen in der Dokumentation entdeckte ich, dass ich eine SolutionIO Schnittstelle implementieren musste, um die Eingabe zu lesen und in eine Lösung zu überführen.Implementierung einer SolutionIO-Schnittstelle für das Benchmarking

Dies ist meine Konfiguration ohne Solver:

<benchmarkDirectory>local/data/nurserostering/folder</benchmarkDirectory> 
<inheritedSolverBenchmark> 
    <problemBenchmarks> 
     ----> <problemIOClass>org.optaplanner.examples.nurserostering.persistence.CustomBenchmarkIO</problemIOClass> <----- 
     <inputSolutionFile>data/nurserostering/import/importTest/Input0.xml</inputSolutionFile> 
    </problemBenchmarks> 

Der Fehler ich bin immer auf dem <problemIOClass> Tag ist (Ende der Post sehen).

Das ist mein CustomBenchmarkIO (Custom SolutionIO):

package org.optaplanner.examples.nurserostering.persistence; 
import java.io.File; 
import org.optaplanner.core.api.domain.solution.Solution; 

public interface CustomProblemIOInterface { 

String getFileExtension(); 

Solution read(File inputSolutionFile); 

void write(Solution solution, File outputSolutionFile); 
} 

Und hier habe ich eine Klasse, die diese Schnittstelle implementiert:

package org.optaplanner.examples.nurserostering.persistence; 
import java.io.File; 
import org.optaplanner.core.api.domain.solution.Solution; 
import org.optaplanner.persistence.common.api.domain.solution.SolutionFileIO; 

public class CustomBenchmarkIOClass implements CustomProblemIOInterface{ 

public String getInputFileExtension() { 
    return null; 
} 

public String getOutputFileExtension() { 
    // TODO Auto-generated method stub 
    return null; 
} 

public Solution read(File inputSolutionFile) { 
    return null; 
} 

public void write(Object solution, File outputSolutionFile) { 

} 

} 

habe ich versucht, die Klasse und die Schnittstelle, aber ich bekomme immer noch den gleichen Fehler. Hier

ist das vollständige Fehlerprotokoll:

Exception in thread "main" java.lang.IllegalArgumentException: Unmarshalling of benchmarkConfigResource (org/optaplanner/examples/nurserostering/benchmark/monetBenchmarkConfig.xml) fails. 
at org.optaplanner.benchmark.impl.XStreamXmlPlannerBenchmarkFactory.configure(XStreamXmlPlannerBenchmarkFactory.java:105) 
at org.optaplanner.benchmark.api.PlannerBenchmarkFactory.createFromXmlResource(PlannerBenchmarkFactory.java:46) 
at org.optaplanner.examples.common.app.CommonBenchmarkApp$ArgOption.buildPlannerBenchmarkFactory(CommonBenchmarkApp.java:105) 
at org.optaplanner.examples.common.app.CommonBenchmarkApp.buildAndBenchmark(CommonBenchmarkApp.java:66) 
at org.optaplanner.examples.nurserostering.app.NurseRosteringBenchmarkApp.main(NurseRosteringBenchmarkApp.java:24) 
Caused by: com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$UnknownFieldException: No such field org.optaplanner.benchmark.config.ProblemBenchmarksConfig.problemIOClass 
---- Debugging information ---- 
field    : problemIOClass 
class    : org.optaplanner.benchmark.config.ProblemBenchmarksConfig 
required-type  : org.optaplanner.benchmark.config.ProblemBenchmarksConfig 
converter-type  : com.thoughtworks.xstream.converters.reflection.ReflectionConverter 
line number   : 6 
class[1]   : org.optaplanner.benchmark.config.SolverBenchmarkConfig 
class[2]   : org.optaplanner.benchmark.config.PlannerBenchmarkConfig 
version    : 1.4.7 
------------------------------- 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.handleUnknownField(AbstractReflectionConverter.java:495) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:351) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:257) 
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) 
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65) 
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:474) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:406) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:257) 
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) 
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65) 
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:474) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:406) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:257) 
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) 
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65) 
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66) 
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50) 
at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134) 
at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32) 
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1185) 
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1169) 
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1040) 
at org.optaplanner.benchmark.impl.XStreamXmlPlannerBenchmarkFactory.configure(XStreamXmlPlannerBenchmarkFactory.java:133) 
at org.optaplanner.benchmark.impl.XStreamXmlPlannerBenchmarkFactory.configure(XStreamXmlPlannerBenchmarkFactory.java:123) 
at org.optaplanner.benchmark.impl.XStreamXmlPlannerBenchmarkFactory.configure(XStreamXmlPlannerBenchmarkFactory.java:103) 
... 4 more 

Ich poste diese Frage, weil ich nicht weiß, was ich noch nicht ausprobiert, da ich nicht weiß, alle Möglichkeiten einer Umsetzung Benchmark.

Antwort

1

Sie müssen eine Schnittstelle von optaplanner selbst implementieren, genannt SolutionFileIO: Sie müssen keine eigene Schnittstelle definieren. Es ist in diesen Tagen im Glas optaplanner-persistence-common.

+0

Ich habe getan, wie Sie sagten, aber ich bekomme immer noch den gleichen Fehler. Könnte es etwas in meiner Konfiguration oder in meiner CustomBenchmarkIOClass geben? –

+0

Diese Ausnahme sagt: 'Feld: problemIOClass'. das sollte ' ...' in der config (oder etwas in der Art, überprüfen Sie die Dokumente der von Ihnen verwendeten Version). –

+0

Das hat es behoben. Vielen Dank! –