DRL 中的流口水全局记录器 - 全局的非法类



我正在尝试将slf4j Logger对象作为全局传递给我的Drools规则。

在我的调用 Java 类中,我定义了记录器并通过 setGlobal kie 服务器命令将其传递给规则:

private static final Logger LOGGER = LoggerFactory.getLogger(KieServerTester.class);
Command<?> setGlobalCommand = commandsFactory.newSetGlobal("logger", LOGGER);
commands.add(setGlobalCommand);

在我的规则文件中,我将全局定义为:

global org.slf4j.Logger logger;

但是,当我执行命令时,出现此错误:

错误 [org.kie.server.services.drools.DroolsKieContainerCommandServiceImpl] (默认任务-1( 调用容器"mycontainer"时出错:java.lang.RuntimeException:全局的非法类。Expected [org.slf4j.Logger], found [java.util.LinkedHashMap].

我不知道它从哪里得到LinkedHashMap。我已经逐步浏览了调用代码,但看不到地图的显示位置。

如果我将规则文件中的全局更改为 LinkedHashMap,则不会收到错误。 所以不知何故,看起来我在 Java 类中的记录器对象正在转换为 LinkedHashMap。

任何帮助表示赞赏,谢谢。

你不能只是将你想要的任何对象传递给Kie-Server。我假设您正在使用 REST 与 Kie-Server 进行通信,在这种情况下,对象必须在您的端序列化并在 Kie-Server 端反序列化。 我猜 Kie-Server 无法反序列化您传递的对象,它只是将其保留为Map.

希望对您有所帮助,

最新更新