[jboss-jira] [JBoss JIRA] (DROOLS-1724) DRL compilation error on a generic type property
Ryo Murai (JIRA)
issues at jboss.org
Thu Sep 7 01:56:00 EDT 2017
Ryo Murai created DROOLS-1724:
---------------------------------
Summary: DRL compilation error on a generic type property
Key: DROOLS-1724
URL: https://issues.jboss.org/browse/DROOLS-1724
Project: Drools
Issue Type: Bug
Affects Versions: 6.5.0.Final
Environment: drools 6.5.0.Final / java 1.8.0_131
Reporter: Ryo Murai
Assignee: Edson Tirelli
I got a DRL compilation error on accessing through a generic type property. Minimized object definition is below.
{code:borderStyle=solid}
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
{code}
DRL(snippet) is here
{code:borderStyle=solid}
when
$orderLine: OrderLine()
// compilation failed
Product(
id == $orderLine.product.id || category == $orderLine.product.category
) from discountProducts
{code}
This causes below exception.
{panel}
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]]]
{panel}
This is weird because it won't occur when the restriction has single condition like below. Drools could analyze this expression.
{code:borderStyle=solid}
when
$orderLine: OrderLine()
// this is compiled, even if `Product(id == $orderLine.product.id)`
Product(
category == $orderLine.product.category
) from discountProducts
{code}
--
This message was sent by Atlassian JIRA
(v7.2.3#72005)
More information about the jboss-jira
mailing list