Drools - Drools中的ClassCastException 6

时间:2016-08-26 06:56:25

标签: java eclipse drools classcastexception accumulate

我在Eclipse中有一个非常简单的Drools项目,运行完成就好了,但是当我打开或点击我的.drl文件时,Eclipse中会弹出以下错误:

  

发生了错误。有关详细信息,请参阅错误日志   org.drools.core.base.accumulators.BigDecimalSumAccumulateFunction无法强制转换为org.drools.runtime.rule.AccumulateFunction

当我点击OK然后再次运行程序时,它仍然正常运行。每当我单击.drl文件并单击返回时,错误就会再次弹出。 Eclipse日志具有以下堆栈跟踪:

  

!ENTRY org.eclipse.ui.workbench 4 2 2016-08-25 23:35:24.144

     

!MESSAGE从插件调用代码时出现问题:“org.eclipse.ui.workbench”。

     

!堆叠0   java.lang.ClassCastException:org.drools.core.base.accumulators.BigDecimalSumAccumulateFunction无法强制转换为org.drools.runtime.rule.AccumulateFunction       at org.drools.compiler.PackageBuilderConfiguration.loadAccumulateFunction(PackageBuilderConfiguration.java:530)       at org.drools.compiler.PackageBuilderConfiguration.buildAccumulateFunctionsMap(PackageBuilderConfiguration.java:479)       在org.drools.compiler.PackageBuilderConfiguration.init(PackageBuilderConfiguration.java:194)       在org.drools.compiler.PackageBuilderConfiguration。(PackageBuilderConfiguration.java:170)       在org.drools.eclipse.DroolsEclipsePlugin.generateParsedResource(DroolsEclipsePlugin.java:612)       在org.drools.eclipse.DroolsEclipsePlugin.parseResource(DroolsEclipsePlugin.java:515)       at org.drools.eclipse.editors.outline.RuleContentOutlinePage.initRules(RuleContentOutlinePage.java:279)       at org.drools.eclipse.editors.outline.RuleContentOutlinePage.update(RuleContentOutlinePage.java:159)       at org.drools.eclipse.editors.outline.RuleContentOutlinePage.createControl(RuleContentOutlinePage.java:133)

在此处查看整个堆栈跟踪:http://pastebin.com/hJK1Cs03

我的节目:

import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;

public class GhostFactTest {

    public static final void main(String[] args) {
        try {
            // load up the knowledge base
            KieServices ks = KieServices.Factory.get();
            KieContainer kContainer = ks.getKieClasspathContainer();
            KieSession kSession = kContainer.newKieSession("ksession-rules");

            FruitFact f1 = new FruitFact(1, "APPLE", "RED");
            FruitFact f2 = new FruitFact(2, "APPLE", "GREEN");

            kSession.insert(f1);
            kSession.insert(f2);
            kSession.fireAllRules();

            System.out.println("\n********************\nSUCCESS!\n********************");

        } catch (Throwable t) {
            t.printStackTrace();
        }
    }
}

.drl根本不需要任何规则来抛出错误。编译时或运行时没有错误。

我有Drools 6. [0-4] .0.Final作为单独的Drools运行时安装,我看到除了Drools 6.0.0.Final之外的每个版本都有这个问题。我正在运行Java7。我也能用Drools 5.5.0.Final运行一个非常类似的程序,没有任何问题。

鉴于程序以预期的行为成功,并且即使.drl为空也抛出错误,我倾向于认为这是Eclipse和我的项目设置的问题。有没有人对如何解决这个问题有任何指导?提前谢谢。

1 个答案:

答案 0 :(得分:1)

问题在于我使用Drools 5.5.0.Final Eclipse插件和Drools 6项目。升级到Drools 6.4.0.Final Eclipse plug-in后,问题就消失了。