Drools Global Logger в DRL - незаконный класс для глобального - PullRequest
0 голосов
/ 07 октября 2019

Я пытаюсь передать объект Logf slf4j в мое правило Drools как глобальное.

В своем вызывающем классе Java я определяю регистратор и передаю его правилу с помощью команды setGlobal kie server:

private static final Logger LOGGER = LoggerFactory.getLogger(KieServerTester.class);

Command<?> setGlobalCommand = commandsFactory.newSetGlobal("logger", LOGGER);
    commands.add(setGlobalCommand);

И в моем файле правил глобальное значение определено как:

global org.slf4j.Logger logger;

Однако, когда я выполняю команду, я получаю эту ошибку:

ERROR [org.kie.server.services.drools.DroolsKieContainerCommandServiceImpl] (задание по умолчанию-1) Ошибка при вызове контейнера «mycontainer»: java.lang.RuntimeException: недопустимый класс для глобальных. Ожидается [org.slf4j.Logger], найдено [java.util.LinkedHashMap].

Понятия не имею, откуда он получает LinkedHashMap. Я прошел через вызывающий код, но не вижу, где отображается карта.

Если я изменю свой глобальный объект в файле правил на LinkedHashMap, я не получу сообщение об ошибке. Так что как-то похоже, что мой объект логгера в Java-классе преобразуется в LinkedHashMap.

Любая помощь приветствуется, спасибо.

1 Ответ

0 голосов
/ 07 октября 2019

Вы не можете просто передать любой объект, который хотите, на Kie-сервер. Я предполагаю, что вы используете REST для связи с Kie-Server, и в этом случае объекты должны быть сериализованы на вашем конце и десериализованы на стороне Kie-Server. Я предполагаю, что Kie-Server не может десериализовать объект, который вы передаете, и он просто оставляет его как Map.

Надеюсь, это поможет,

...