0

我正在尝试将 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:全局的非法类。预期 [org.slf4j.Logger],找到 [java.util.LinkedHashMap]。

我不知道它是从哪里得到 LinkedHashMap 的。我已单步执行调用代码,但看不到地图出现的位置。

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

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

4

1 回答 1

0

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

希望能帮助到你,

于 2019-10-07T11:19:57.687 回答