Почему это вызывает ошибку несоответствующего ввода? - PullRequest
0 голосов
/ 23 января 2020

В настоящее время я пытаюсь создать свое первое правило с помощью Drools 7.0.0, следуя простому руководству в Springboot. Тем не менее, я застрял на первом этапе моего построения правил, он просто не будет создавать экземпляр моего KieModule. java из-за ошибки в моем файле .drl (где определено мое единственное правило)!

Вот мое определение Бина (оно ломается при методе .buildAll ()):

  /**
   * Used by the Drools engine.
   * 
   * @return KieContainer used by Drools.
   */
  @Bean
  @DependsOn({"kStreamJson"})
  public KieContainer kieContainer() {
    KieServices kieServices = KieServices.Factory.get();

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

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

Вот мой файл .drl (источник проблемы):

package com.ruleengine;

import com.ruleengine.domain.Alert;
import com.unifiedformat.UnifiedData;
import java.util.*;

global com.ruleengine.domain.Alert alert;
dialect  "mvel"

function Double getMae(UnifiedData unifiedData) { 
    return Double.valueOf(unifiedData.getData().getValue());
}

rule "Check MAE - Scenario 1"
    when
        mae:Double(getMae(UnifiedData(getData().getValue()) > 0.1);
    then
        alert.setAlertMessage("ok");
end

А вот ошибка, которую я получаю:

2020-01-23 10:53:16.098 ERROR 3544 --- [           main] o.d.c.k.builder.impl.AbstractKieModule   : Unable to build KieBaseModel:defaultKieBase
[18,8]: [ERR 102] Line 18:8 mismatched input 'alert' in rule "Check MAE - Scenario 1"
[0,0]: Parser returned a null Package

Я перепробовал все, что мог придумать, и я не специалист по Drools. Независимо от того, какую строку я поставлю вместо предупреждения, она сломается. Даже System.out.println () не работает и выдает несоответствующую ошибку ввода. Почему мое правило недействительно? Я понятия не имею. Пожалуйста, помогите мне!

1 Ответ

0 голосов
/ 24 января 2020

Проблема была в имени пакета.

При удалении имени пакета из моего файла .drl больше не было ошибки несоответствующего ввода.

Я не знаю, почему сообщение об ошибке от Drools было не о названии пакета, а о ложном несоответствующем вводе.

Кроме того, я обновил свою версию Drools с 7.0.0 до 7.31

...