Получение «невозможно разрешить метод с использованием строгого режима: org.drools.core.spi.KnowledgeHelper.throw ()» при создании исключения в файле DRL

Я пытаюсь интегрировать drools с Spring Boot и хотел бы создать исключение, если свойство модели не удовлетворено.

В этом случае у меня есть модель клиента, и я хотел бы проверить, имеет ли ее поле lastName значение NULL - если да, то выдайте исключение.

Однако во время компиляции я получаю сообщение «невозможно разрешить метод с использованием строгого режима: org.drools.core.spi.KnowledgeHelper.throw()». Каков правильный способ попробовать это?

Я попытался использовать global для обновления поля, и он работает, однако для удобства я просто хотел бы создать исключение с сообщением.

Ниже мой файл конфигурации:

@Configuration
public class CreateClientRuleEngineConfig {

    public static final String bhfCreateClientRule = "CreateClientRule.drl";

    @Bean
    public KieContainer kieContainer() {
        KieServices kieServices = KieServices.Factory.get();

        KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
        kieFileSystem.write(ResourceFactory.newClassPathResource(bhfCreateClientRule));
        KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);
        kieBuilder.buildAll();
        KieModule kieModule = kieBuilder.getKieModule();

        return kieServices.newKieContainer(kieModule.getReleaseId());

    }

}

========================================= Ниже мой файл DRL:

import com.test.rulengine.entity.Client;
import com.test.rulengine.exception.CreateClientException;

dialect  "mvel"

rule "Required fields"
    when
        clientInstance: Client( lastName == null);
    then
        throw new CreateClientException("LastName is required");
end

=========================================

Ниже приведена моя зависимость Maven (примечание: я не включал другие зависимости, не связанные с Drools/Kie):

    <properties>
        <java.version>1.8</java.version>
        <drools-version>7.0.0.Final</drools-version>
        <kie-version>7.0.0.Final</kie-version>
    </properties>

    <dependencies>

        <!-- Drools/Kie dependencies -->
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-core</artifactId>
            <version>${drools-version}</version>
        </dependency>
        <dependency>
            <groupId>org.kie</groupId>
            <artifactId>kie-spring</artifactId>
            <version>${kie-version}</version>
        </dependency>

=========================================

Вот ошибка при компиляции:

Unable to Analyse Expression throw new CreateClientException("LastName is required");: [Error: unable to resolve method using strict-mode: org.drools.core.spi.KnowledgeHelper.throw()] [Near : {... throw new CreateClientExceptio ....}] ^ [Line: 6, Column: 0] : [Rule name='Required fields']

Я проверил эту ссылку по этому поводу, и я действительно не могу понять, чего мне не хватает. заранее спасибо

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
0
0
838
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы должны удалить ключевое слово «диалект «mvel»» в вашем файле drl.

Извините, не смог вернуться к этому, так как был сосредоточен на других вещах. Я только что глобально импортировал DTO, чтобы отслеживать ошибки/неудачные проверки. В любом случае спасибо.

junbetterway 02.05.2020 12:20
Ответ принят как подходящий

Кажется, это ограничение mvel. Используйте метод java в блоке then, ниже приведен только пример. Выделите класс со статическими методами и выполните их в соответствующих блоках. Пишите java-код в java-коде...

import org.droolsassert.Client;
import org.droolsassert.CreateClientException;
import com.google.common.base.Preconditions;

dialect  "mvel"

rule "Required fields"
    when
        clientInstance: Client( lastName == null)
    then
        Preconditions.checkArgument(false, "LastName is required");
end

Извините, не смог вернуться к этому, так как был сосредоточен на других вещах. Я только что глобально импортировал DTO, чтобы отслеживать ошибки/неудачные проверки. В любом случае спасибо.

junbetterway 02.05.2020 12:21

Другие вопросы по теме