泛型类型属性上的DRL编译错误

时间:2017-09-06 08:38:34

标签: java drools

我正在使用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库的错误吗?

0 个答案:

没有答案