2012-01-27 36 views
0

我試圖從XML配置創建解算器。但是整個過程返回一個毫無意義的隱祕錯誤信息。Drools Planner在創建配置器時遇到困難:如何調試

我該如何解決這個問題?我如何理解這一點,以實際解決類似的問題?

[email protected]:~/dev/drools/sudoku$ java App 
Exception in thread "main" java.lang.NullPointerException 
    at org.drools.planner.core.domain.solution.SolutionDescriptor.processPropertyAnnotations(SolutionDescriptor.java:69) 
    at org.drools.planner.core.domain.solution.SolutionDescriptor.<init>(SolutionDescriptor.java:61) 
    at org.drools.planner.config.solver.SolverConfig.buildSolutionDescriptor(SolverConfig.java:197) 
    at org.drools.planner.config.solver.SolverConfig.buildSolver(SolverConfig.java:167) 
    at org.drools.planner.config.XmlSolverConfigurer.buildSolver(XmlSolverConfigurer.java:103) 
    at App.createSolver(App.java:62) 
    at App.main(App.java:40) 

這裏列出了引發它的函數。該行當然是return configurer.buildSolver();

private static Solver createSolver(){ 
XmlSolverConfigurer configurer = new XmlSolverConfigurer(); 
File file = new File("solver.xml"); 
FileInputStream fin = null; 
try{ 
    fin = new FileInputStream(file);  
} 
catch(IOException e){ 
    System.out.println("Unable to read drl"); 
} 
configurer.configure(fin); 
    //configurer.configure("/home/jesvin/dev/drools/sudoku/solver.xml"); 
    return configurer.buildSolver(); 
} 

的XML的內容:

<?xml version="1.0" encoding="UTF-8"?> 
<solver> 
    <environmentMode>DEBUG</environmentMode> 

    <solutionClass>domain.Sudoku</solutionClass> 
    <planningEntityClass>domain.Digit</planningEntityClass> 
    <scoreDrl>score.drl</scoreDrl> 
    <scoreDefinition> 
    <scoreDefinitionType>SIMPLE</scoreDefinitionType> 
    </scoreDefinition> 

    <termination> 
    <scoreAttained>0</scoreAttained> 
    </termination> 
    <!-- 
    <constructionHeuristic> 
    <constructionHeuristicType>FIRST_FIT_DECREASING</constructionHeuristicType> 
    <constructionHeuristicPickEarlyType>FIRST_LAST_STEP_SCORE_EQUAL_OR_IMPROVING</constructionHeuristicPickEarlyType> 
</constructionHeuristic> --> 
    <constructionHeuristic> 
    <constructionHeuristicType>FIRST_FIT</constructionHeuristicType> 

     <moveFactoryClass>solution.RowChangeMoveFactory</moveFactoryClass> 
    </selector> 
    <acceptor> 
     <completeSolutionTabuSize>1000</completeSolutionTabuSize> 
    </acceptor> 
    <forager> 
     <!-- Real world problems require to use of <minimalAcceptedSelection> --> 
    </forager> 
    </localSearch> 
</solver> 

回答

1

OP的另外:

問題與無意的只寫屬性有關。有setBlockListgetBlocklist(吸氣劑中的'l'),這是一個錯字。 Drools抱怨說,因爲它檢測到兩個屬性,其中一個屬性是隻寫的。其他不匹配是isFixedsetFixed。它適用於內置boolean,但不適用於Boolean對象。

我解決了這個問題mailing list post.