Ich habe ein einfaches Projekt mit Drools und Java basierend auf this tutorial erstellt. Es funktionierte perfekt, also passte ich es an, was ich machen wollte. Meine DRL-Dateien verwenden den mvel-Dialekt (anstelle des Java-Dialekts) und die Initialisierung erfolgt in der Regel "initial" innerhalb der DRL-Datei. Sie können dieses Projekt (Quellcode sowie Bibliotheken und DRL-Datei) here sehen. Meine DRL-Datei sieht mehr weniger wie folgt aus:Drools - Fehler beim Erstellen von Feldaccessor für TypeDeclaration
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
Alles funktioniert gut, aber das Paket in der ersten Zeile omd
sein muss, obwohl alle Klassen in der com.sample
Paket sind. Wenn ich den Paketnamen zu com.sample
geändert, bekam ich folgende Fehlermeldung:
Error creating field accessors for TypeDeclaration 'ocenaKandydata' for type 'ocenaKandydata'.
Und jetzt gibt es den ganzen Spaß ...
ich für Android ähnliches Projekt erstellt. Ich benutze den gleichen Code, aber die Bibliotheken kommen von another example (die vorherigen haben Klassen in Java. * Oder javax. * Pakete, die nicht während der Programmierung für Android erlaubt ist). Sie können dieses Projekt here sehen. Ich lege die psc-zatrudnienie-ocena_kandydata.drl
Datei in den Smartphone-Speicher unter . Wenn das Paket in der DRL-Datei ist pl.me.drools2tp
(das gleiche wie alle Klassen in Android App in platziert werden), erhalte ich folgende Fehler (ähnlich jenen, die oben):
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'
und wenn ich wechsle den Paketnamen in DRL-Datei zu etwas anderen, die Fehler sind wie folgt:
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'
Könnte jemand mir einen Rat geben darüber? Was genau bedeutet "Feldzugriff für TypeDeclaration"? Alle Klassen, die in declare
Teil der DRL-Datei erwähnt werden, sind auch in Java definiert, haben value
Feld und beide Getter und Setter. Die Dekstop-Version verwendet Drools 5.3.0 (es gibt eine riesige Art von JAR-Dateien von http://download.jboss.org/drools/release/5.3.0.Final/, wie es auf der Website von TutorialsPoint gesagt wurde). Es gibt auch eine Frage, die mit meiner verbunden ist: Integration of Drools (Expert System) with Android Projects
Ich bin sehr dankbar für einige Hilfe, Tipps oder Beispiele.
Mit freundlichen Grüßen, Peter.
BTW Ich benutze IntelliJ und Android Studio.
So sieht die Sache so aus: – user3855877
1. das Paket in der DRL-Datei ist pl.me.drools2tp und die 'ocenaXXX' Klassen sind im Paket pl.me.drools2tp; In der DRL-Datei gibt es 'declare' Definitionen. Dann bekomme ich ** Error creating field accessor ... ** 2. Wenn ich 'ocenaXXX' Klassen in 'pl.me.drools2tp.model' Paket verschiebe, bekomme ich das:' Class 'ocenaXXX' nicht für den Typ gefunden Deklaration von 'ocenaXXX' [DialectError message = 'Kompilierte Klassen können nicht verdrahtet werden, wahrscheinlich im Zusammenhang mit Kompilierungsfehlern: JavaDialect kann nicht verdrahtet werden]] – user3855877
3. Wenn ich 'ocenaXXX' Klassen in das' pl.me.drools2tp' Paket lege und entferne 'declare'-Anweisungen aus der DRL-Datei (mit' pl.me.drools2tp' in der ersten Zeile), bekomme ich folgendes: 'Constraint kann nicht erstellt werden, da 'value' ungültig ist: [Rule name = 'ocenaKandydata/1 '] '(der Fehler tritt 3 mal für jede Regel auf) – user3855877