最新のdrools 6.5バージョンでdrools 5.3を使用していたアプリケーションを移行しています。ここに私の実際の抽出物である:Drools条件でEnumキーでマップからオブジェクトを取得できません
public class Convention {
[...]
private Map<ECommissionType, List<Commission>> commissions = new HashMap<>();
[...]
}
と非常にシンプルな列挙:
public enum ECommissionType {
ACQ,RIS,POF,[...]
}
私は決定表を使用していて、条件ヘッダの一つは以下の通りです($convention
が適切であると仮定すると元の状態に初期化され、示されConvention
クラス)のインスタンスである:私のルールを定義するラインで
$comm : Commission() from $convention.getCommissions().get(ECommissionType.$1)
、私は価値のいずれかを使用しています例えば、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']
このエラーを処理するための洞察はありますか?
確かに、私は2つの括弧を忘れてしまいました。私はそれらを私のポストに加えました。しかし、私は本当にあなたの答えを理解していません。私は多くのデシジョンテーブルでこの構文を使用しています。左側に単一のオブジェクトを持つ 'from'キーワードの右側に' List'があります。これは、drools 5とdrools 6の両方で動作し、リストのオブジェクトに対してアクションを適用します。私は単に、デシジョンテーブルのアクション列のリストのすべてのオブジェクトに対してメソッド(セッター)を呼び出すだけです。 – Wis
ところで、私はEnumMapを見て、聞いたことはありません。 – Wis
おっと、今私は混乱していました。私は何が分からないのでしょうか、多分それは欠けている括弧でした;-)私の改訂された答えを見て、私は調査します。 – laune