当前位置: 首页 > 知识库问答 >
问题:

Drools-为TypeDeclaration创建字段访问器时出错

车子平
2023-03-14

基于本教程,我使用Drools和Java创建了一个简单的项目。它运行完美,所以我根据我想做的进行了调整。我的DRL文件使用mvel方言(而不是Java方言),初始化发生在DRL文件中的规则“初始”中。你可以在这里看到这个项目(源代码以及库和DRL文件)。我的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创建了类似的项目。我使用了相同的代码,但这些库来自另一个示例(之前的库确实将类放在java。*或javax。*包中,这在Android编程时是不允许的)。你可以在这里看到这个项目。我把psc-zatrudnienie-ocena\U kandydata放在。drl文件位于智能手机存储器中的存储/模拟/0/drools/psc-Zatrudniene-ocena\u 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'

有谁能给我一些建议吗?“类型声明的字段访问器”到底是什么意思?DRL文件的声明部分中提到的所有类也在Java中定义,具有值字段和getter和setter。dekstop版本使用Drools 5.3.0(在http://download.jboss.org/drools/release/5.3.0.Final/正如TutorialsPoint网站上所说)。还有一个与我有关的问题:Drools(专家系统)与Android项目的集成

我将非常感谢一些帮助,提示或示例。

向你问好,彼得。

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

共有1个答案

张建华
2023-03-14

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

根据您的问题,我假设您拥有与在DRL中声明的类相同的副本,而不是某些Java代码。

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

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

 类似资料:
  • 我正在尝试实现drools决策表。当我实现我自己的示例代码时,我得到以下错误:java.lang.运行时异常:创建KieBase时出错。 Eclipse IDE控制台中可见的错误是: Java语言lang.RuntimeException:创建KieBase时出错[消息[id=1,KieBase=患者,级别=错误,路径=PatientDecisionTable.xls,行=10,列=0文本=[错误

  • 简要说明:我对java或android studio不是很有经验,所以请直接回答我的noobish问题。 我正在做一个有RAL颜色片段的项目。总共只有280多张图片。我正在尝试为此片段创建一个recyclerView。为了避免这个问题比实际问题长出几英里,我删去了ralfragment中的一些颜色。 我希望颜色的布局如下所示: 我看了一些教程(没有一个是在片段中使用rv的),并试图将它们实现到我的

  • 正如他们所说,System是最终的类,它将类型外的PrintStream作为字段成员,println是PrintStream类中的方法。 我创建了一个类,其中静态字段no的类型为,只想访问Number类的方法,但它抛出了 对于UseNumber类

  • 问题内容: 您是否需要为Oracle数据库中按字段分组的字段创建索引? 例如: 我正在测试我为上面创建的索引,与此查询唯一相关的索引是为field_two创建的索引。在任何其他字段上创建的其他单字段索引或组合索引将不会用于上述查询。这听起来正确吗? 问题答案: 可能是正确的,但这取决于您拥有多少数据。通常,我会为我在GROUP BY中使用的列创建索引,但是在您的情况下,优化器可能已经决定,在使用f

  • 我试图通过Cloud Firestore实时更新访问标记为的字段。 下面是我的数据结构: 以前,在Firebase Realtime Database下,我会。addValueEventListener()并深入到“答案”。然而,有了云Firestore,它就有点复杂了。 应答文档总数。 每个单独的答案

  • 我有一个自定义输入组件,它实现ControlValueAccessor,提供程序声明如下。它似乎工作得很好。在我能在互联网上找到的所有教程中,只要提供NG_VALUE_访问器,forwardRef就被广泛使用 将以下代码发送到生产环境是否安全?