【问题标题】:Drools - Error creating field accessor for TypeDeclarationDrools - 为 TypeDeclaration 创建字段访问器时出错
【发布时间】:2016-12-12 21:14:12
【问题描述】:

我基于this tutorial 使用 Drools 和 Java 创建了一个简单的项目。它工作得很好,所以我把它改编成我想做的事。我的 DRL 文件使用 mvel 方言(而不是 Java 方言),并且在 DRL 文件内的“初始”规则中进行初始化。你可以看到这个项目(源代码以及库和 DRL 文件)here。我的 DRL 文件看起来不像以下内容:

package omd
dialect "mvel"
declare ocenaKwalifikacji
    value : Double
end
declare ocenaKandydata
    value : Double
end
declare ocenaTestow
    value : Double
end
declare ocenaRozmowy
    value : Double
end

rule "ocenakandydata/1 "
when
$ocenaRozmowy : ocenaRozmowy(value==5.0000)
$ocenaKwalifikacji : ocenaKwalifikacji(value==5.0000)
$ocenaTestow : ocenaTestow(value==5.0000)
then
  insert(new ocenaKandydata (5.0000))
  System.out.println("ocenaKandydata setting to 5.0000)");
end
rule "ocenakandydata/2 "
when
$ocenaRozmowy : ocenaRozmowy(value==5.0000)
$ocenaKwalifikacji : ocenaKwalifikacji(value==4.0000)
$ocenaTestow : ocenaTestow(value==5.0000)
then
  insert(new ocenaKandydata (5.0000))
  System.out.println("ocenaKandydata setting to 5.0000)");
end

...

rule "ocenakandydata/64 "
when
$ocenaRozmowy : ocenaRozmowy(value==2.0000)
$ocenaKwalifikacji : ocenaKwalifikacji(value==2.0000)
$ocenaTestow : ocenaTestow(value==2.0000)
then
  insert(new ocenaKandydata (2.0000))
  System.out.println("ocenaKandydata setting to 2.0000)");
end

rule "initial"
when
then
/*DATA*/
insert(new ocenaKwalifikacji(5.0));
    insert(new ocenaRozmowy(2.0));
    insert(new ocenaTestow(2.0));
end

一切正常,但第一行中的包必须是omd,尽管所有类都在com.sample 包中。当我将包名更改为com.sample时,出现以下错误:

Error creating field accessors for TypeDeclaration 'ocenaKandydata' for type 'ocenaKandydata'.

现在有所有的乐趣......

我为 Android 创建了类似的项目。我使用了相同的代码,但库来自another example(之前的库确实将类放在 java.* 或 javax.* 包中,这在为 Android 编程时是不允许的)。你可以看到这个项目here。我将psc-zatrudnienie-ocena_kandydata.drl 文件放在/storage/emulated/0/drools/psc-zatrudnienie-ocena_kandydata.drl 下的智能手机存储中。当DRL文件中的包为pl.me.drools2tp时(与Android应用程序中所有类的放置相同),我得到以下错误(类似于上面的错误):

Error creating field accessors for TypeDeclaration 'ocenaKwalifikacji' for type 'ocenaKwalifikacji'
Error creating field accessors for TypeDeclaration 'ocenaKandydata' for type 'ocenaKandydata'
Error creating field accessors for TypeDeclaration 'ocenaTestow' for type 'ocenaTestow'
Error creating field accessors for TypeDeclaration 'ocenaRozmowy' for type 'ocenaRozmowy'

当我将 DRL 文件中的包名更改为另一个时,错误如下:

Class 'ocenaKwalifikacji' not found for type declaration of 'ocenaKwalifikacji'
Class 'ocenaKandydata' not found for type declaration of 'ocenaKandydata'
Class 'ocenaTestow' not found for type declaration of 'ocenaTestow'
Class 'ocenaRozmowy' not found for type declaration of 'ocenaRozmowy'

有人可以给我一些建议吗? “TypeDeclaration 的字段访问器”到底是什么意思? DRL 文件的declare 部分中提到的所有类也在Java 中定义,具有value 字段以及getter 和setter。 dekstop 版本使用 Drools 5.3.0(有大量来自 http://download.jboss.org/drools/release/5.3.0.Final/ 的 JAR 文件,正如在 TutorialsPoint 网站上所说的那样)。还有一个与我有关的问题:Integration of Drools (Expert System) with Android Projects

我将非常感谢您提供一些帮助、提示或示例。

最好的问候, 彼得。

顺便说一句,我使用 IntelliJ 和 Android Studio。

【问题讨论】:

    标签: java android drools


    【解决方案1】:

    不要使用 com.sample 中的 Java 类和同一包中的 DRL 文件进行编译,其中声明语句与 Java 类相矛盾。

    根据您的问题,我假设您在 DRL 中声明的类与某些 Java 代码相比具有相同的重复项。

    只需省略所有声明语句并坚持使用 Java 类保留声明并将 Java 类移动到另一个包中。

    顺便说一句:将您的类字段设为私有。

    【讨论】:

    • 所以,事情看起来如下:
    • 1. DRL 文件中的包是 pl.me.drools2tp,“ocenaXXX”类在包 pl.me.drools2tp 中; DRL 文件中也有declare 定义。然后我得到 **Error Creating field accessor ... ** 2. 当我将 'ocenaXXX' 类移动到 pl.me.drools2tp.model 包时,我得到这个:`没有找到 'ocenaXXX' 类型声明的类 'ocenaXXX' [方言错误消息='无法连接编译的类,可能与编译失败有关:无法连接JavaDialect']`
    • 3.当我将ocenaXXX 类放入pl.me.drools2tp 包中,并从DRL 文件中删除declare 语句(在第一行使用pl.me.drools2tp 包),我得到:Unable to build constraint as 'value' is invalid : [Rule name='ocenaKandydata/1 '](每个规则的错误发生3 次)
    • 除此之外,我也得到这样的错误(当情况 3 发生时): java.io.FileNotFoundException: nullorg.drools.base.pl.me.drools2tp.ocenaRozmowy149761830$getValue.apk: open failed :EROFS(只读文件系统)(ocenaTestowocenaKwalifikacji 的类似错误 - 不适用于 ocenaKandydata)。它们都是由 Caused by: android.system.ErrnoException: open failed: EROFS (Read-only file system)
    • 我刚刚更新了我的仓库:bitbucket.org/pm_rulesengines/drools_android
    猜你喜欢
    • 2023-04-06
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    相关资源
    最近更新 更多