我正在使用drools 6.5.0 / java 1.8.0_131
通过泛型类型属性访问时出现DRL编译错误。 最小化的对象定义如下。
public interface OrderLine<T extends Product> {
T getProduct();
}
public interface Product {
String getId();
String getCategory();
}
// and I have concrete classes, ex. Book, BookOrderLine<Book>, DVD, DVDOrderLine<DVD>, ... etc
DRL(代码段)在这里
when
$orderLine: OrderLine()
// compilation failed
Product(
id == $orderLine.product.id || category == $orderLine.product.category
) from discountProducts
这导致以下异常。
java.lang.RuntimeException: [Message [id=1, kieBase=defaultKieBase, level=ERROR, path=rules/checkorder-not-compiled.drl, line=15, column=0 text=Unable to Analyse Expression id == $orderLine.product.id || category == $orderLine.product.category:
[Error: unable to resolve method using strict-mode: java.lang.Object.category()]
[Near : {... Line.product.id || category == $orderLine.product.category ....}]
^
[Line: 15, Column: 2]]]
这很奇怪,因为当限制具有如下单一条件时不会发生。 Drools可以分析这个表达。
when
$orderLine: OrderLine()
// this is compiled, even if `Product(id == $orderLine.product.id)`
Product(
category == $orderLine.product.category
) from discountProducts
Q值。这是drools或mvel库的错误吗?