Question

J'ai essayé de créer un solveur à partir de la configuration XML. Mais l'ensemble du processus renvoie un message d'erreur cryptique qui n'a aucun sens.

Comment puis-je réparer ça? Et comment puis-je comprendre cela pour résoudre des problèmes similaires comme celui-ci?

jesvin@Jesvin-Technovia:~/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)

La fonction qui le lance est répertoriée ici. La ligne est bien sûr 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();
}

Le contenu du 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>
Était-ce utile?

La solution

Le message d'erreur cryptique est corrigé dans 5.4.0.beta1 (déjà publié): https://issues.jboss.org/browse/jbrules-3247

Autres conseils

Ajout de l'OP:

Le problème était lié à une propriété en écriture uniquement par inadvertance. Il y avait setBlockList et getBlocklist (Petit «l» dans le Getter), qui était une faute de frappe. Drools s'est plaint car il a détecté deux propriétés, dont l'une était uniquement en écriture.

L'autre inadéquation était isFixed et setFixed. Cela fonctionne pour boolean intégré, mais pas pour Boolean objet.

J'ai résolu le problème dans un Message de la liste de diffusion.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top