2017-08-23 3 views
0

J'essaie de compiler la règle suivante et d'obtenir une erreur The method concatenateValues(String, String, String) in the type StringHelper is not applicable for the arguments (Object, Object, Object). Ma question est pourquoi $ map.get ("KEY_B"), .. ne retourne pas de valeur String?Drools 6.5 Règle de compilation d'erreur référençant une carte

rule "RULE01" 
    no-loop true 
    when 
     $attribute:String() 
     $map : Map(this["KEY_A"] == "VALUE_A") 
    then 
     ruleResponse.put("ruleName",drools.getRule().getName()); 
     $attribute = StringHelper.concatenateValues($map.get("KEY_B"),$map.get("KEY_C"), $map.get("KEY_D")); 
     ruleResponse.put("result",$attribute); 
end 


public static String concatenateValues(Object value1, Object value2, Object value3){ 
     StringBuilder sb = new StringBuilder(value1 == null ? "" : value1.toString()) 
            .append(value2 == null ? "" : value2.toString()) 
            .append(value3 == null ? "" : value3.toString()); 
     return sb.toString(); 
    } 

Répondre

1

Drools n'a pas connaissance de types génériques. Les résultats de get ont le type Object.

Vous pouvez fixer votre StringHelper.concatenateValues pour fonctionner comme ceci:

StringHelper.concatenateValues(Object o1, Object o2, Object o3){ 
    return concatenateValues(o1.toString, o2.toString, o3.toString); 
} 
+0

Merci Laune, j'ai posté ma mise à jour 'StringHelper.concatenateValues' ci-dessus – Orby