java—将drools从5.0.1更新到5.6:accessordescr和fieldaccessdescr类的问题

li9yvcax  于 2021-07-08  发布在  Java
关注(0)|答案(0)|浏览(209)

我们正在尝试将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版兼容?谢谢您

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题