我们正在尝试将drools从5.0.1版本更新到5.6版本,但是在解析数据库中持久化的规则(在clob字段中)时遇到了一些问题。这是java方法的主代码:
public PackageInfo getPackageInfoFromDrl(byte[] drl)throws ServiceException {
logger.debug("getPackageInfoFromDrl START");
try{
DrlParser parser = new DrlParser();
PackageDescr descr = parser.parse(new StringReader(new String(drl)));
return getPackageInfo(descr);
}catch(Exception t){
} finally {
logger.debug("getPackageInfoFromDrl FINISH");
}
}
哪里 PackageInfo
是我们的java类,它对应于drools类 PackageDescr
但它被用来以图形方式将.drl规则呈现到我们的前端。所以,正如你所看到的,这里有很多getter和setter。特别是,我在解析条件时遇到了一些问题:
PatternDescr d = (PatternDescr) descr;
PatternInfo aux = new PatternInfo();
aux.setIdentifier(d.getIdentifier());
aux.setObjectType(d.getObjectType());
result.setPatternInfo(aux);
if(d.getSource() != null){
if(d.getSource() instanceof FromDescr){
FromDescr fdescr = (FromDescr) d.getSource();
FromInfo from = new FromInfo();
aux.setFromInfo(from);
from.setInfo(getDeclarativeInfo(fdescr.getDataSource()));
}
}
...
}
private DeclarativeInvokerInfo getDeclarativeInfo(DeclarativeInvokerDescr descr){
DeclarativeInvokerInfo result = new DeclarativeInvokerInfo();
//$a.results
if(descr instanceof AccessorDescr){
AccessorDescr acc = (AccessorDescr) descr;
AccessorInfo info = new AccessorInfo();
info.setVariableName(acc.getVariableName());
result.setAccessorInfo(info);
ArrayList<DeclarativeInvokerInfo> res = new ArrayList<DeclarativeInvokerInfo>();
result.setInvokers(res);
if(acc.getInvokers() != null){
@SuppressWarnings("unchecked")
List<DeclarativeInvokerDescr> list = acc.getInvokers();
for(DeclarativeInvokerDescr i: list){
res.add(getDeclarativeInfo(i));
}
}
}
else if(descr instanceof FieldAccessDescr){
FieldAccessDescr f = (FieldAccessDescr) descr;
FieldAccessInfo field = new FieldAccessInfo();
field.setFieldName(f.getFieldName());
field.setArgument(f.getArgument());
result.setFieldAccessInfo(field);
}
return result;
}
令人高兴的是 descr
现在总是 MVELExprDescr
我不知道怎么把它变成 AccessorDescr
,从中提取变量 $a
,然后访问 FieldAccessDescr
从中提取 result
现场。那门新课刚开课 Text
包含文本“$a.result”的字段。我如何更新我们的代码,使之与drools的5.6版兼容?谢谢您
暂无答案!
目前还没有任何答案,快来回答吧!