Drools 条件无法使用 Enum 键从 Map 中检索 object
Drools condition cannot retrieve object from Map with Enum key
我正在将使用 drools 5.3 的应用程序迁移到较新的 drools 6.5 版本。这是我的事实的摘录:
public class Convention {
[...]
private Map<ECommissionType, List<Commission>> commissions = new HashMap<>();
[...]
}
和一个非常简单的枚举:
public enum ECommissionType {
ACQ,RIS,POF,[...]
}
我正在使用一个决定 table,条件之一 header 如下(假设 $convention
在前一个条件下正确初始化并且是Convention
class 所示):
$comm : Commission() from $convention.getCommissions().get(ECommissionType.)
在定义规则的行中,我使用了枚举值之一,例如 POF
或 RIS
。 Drools 5.3 正在编译此条件,但 drools 6.5 不是。它失败并显示此错误消息:
Unable to Analyse Expression $convention.getCommissions().get(ECommissionType.RIS)):
sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl cannot be cast to java.lang.Class : [Rule name='B_CommissionLigne_98']
任何解决此错误的见解?
你有
$conv : Commission from $convention.getCommissions().get(ECommissionType.)
您需要在Commission
之后添加一个()
。
5.3 和 6.0 之间的解析器和表达式求值机制发生了相当大的变化,这可能引入了一个错误。
编辑 是的,一个错误。缩短一些名称但使用相同的类型,这样可以避免问题:
rule comms
when
$conv: Convention()
$comm: Comm() from (ArrayList)($conv.getComms()).get(Type.AAA)
then
(你为什么不使用 EnumMap??)
我正在将使用 drools 5.3 的应用程序迁移到较新的 drools 6.5 版本。这是我的事实的摘录:
public class Convention {
[...]
private Map<ECommissionType, List<Commission>> commissions = new HashMap<>();
[...]
}
和一个非常简单的枚举:
public enum ECommissionType {
ACQ,RIS,POF,[...]
}
我正在使用一个决定 table,条件之一 header 如下(假设 $convention
在前一个条件下正确初始化并且是Convention
class 所示):
$comm : Commission() from $convention.getCommissions().get(ECommissionType.)
在定义规则的行中,我使用了枚举值之一,例如 POF
或 RIS
。 Drools 5.3 正在编译此条件,但 drools 6.5 不是。它失败并显示此错误消息:
Unable to Analyse Expression $convention.getCommissions().get(ECommissionType.RIS)):
sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl cannot be cast to java.lang.Class : [Rule name='B_CommissionLigne_98']
任何解决此错误的见解?
你有
$conv : Commission from $convention.getCommissions().get(ECommissionType.)
您需要在Commission
之后添加一个()
。
5.3 和 6.0 之间的解析器和表达式求值机制发生了相当大的变化,这可能引入了一个错误。
编辑 是的,一个错误。缩短一些名称但使用相同的类型,这样可以避免问题:
rule comms
when
$conv: Convention()
$comm: Comm() from (ArrayList)($conv.getComms()).get(Type.AAA)
then
(你为什么不使用 EnumMap??)