Я использую шаблоны правил drools для компиляции моих правил.
При применении шаблона я использовал HashMap с Object в качестве типа значений.
Из-за этого при компиляции правил тип данных случайным образом изменяется на другие типы, такие как String [], (String, String) и т. Д. c ..
, и я получаю несоответствие типов ошибки при компиляции моих правил.
Я пытаюсь убедиться, что мой параметр правила имеет тип ArrayList, но я не знаю, как преобразовать его, поскольку его тип изменяется случайным образом.
Вот как я применил шаблон правила:
private List<String> connections = new ArrayList<>();
connections.add("\""+connection1+"\"");
connections.add("\""+connection2+"\"");
String name ="myname";
templatepath = new File("mypath").getPath();
Map<String, Object> data = new HashMap<String, Object>();
ObjectDataCompiler objectDataCompiler = new ObjectDataCompiler();
data.put("connections", connections);
data.put("name",name);
objectDataCompiler.compile(Arrays.asList(data), newFileInputStream(templatePath));
это шаблон правила:
template header
name
connections
imports ..
template "split"
rule "rule_@{name}" @Propagation(IMMEDIATE)
no-loop true
when
d: Data()
then
d.setConnections(@{connections});
end
end template
, а вот класс данных:
public class Data {
List <String> connections;
public Decision() {
connections = new ArrayList<>();
}
public void setConnections(List<String> connections){
this.connections= connections;
}
public List<String> getConnections(){
return this.connections;
}
}
при проверке журналов правило компилируется следующим образом
rule "rule_myname" @Propagation(IMMEDIATE)
when
d: Data()
then
d.setConnections(["connection1", "connection2"]) ;
end
, и я получаю следующую ошибку: Syntax error on token "(", Expression expected after this token