在RHS中检查drools中pojo内是否存在字段
我不太会流口水。 我想在RHS中检查POJO中是否存在字段在RHS中检查drools中pojo内是否存在字段,drools,Drools,我不太会流口水。 我想在RHS中检查POJO中是否存在字段 { "category": [ { "nlp": [ { "mainCategory": "Politics" } ], "crawler": [ { "isNLP": true, "mainCategory": "Politics" } ] }
{
"category": [
{
"nlp": [
{
"mainCategory": "Politics"
}
],
"crawler": [
{
"isNLP": true,
"mainCategory": "Politics"
}
]
}
]
}
这是生成的pojo的列表
$RHSmap1:EsRootDoc()
and
$map1:EsRootDoc($categorylist1:category)
$category2:Category($nlplist2:nlp) from $categorylist1
$nlp2:Nlp(mainCategory=="politics") from $nlplist2
then
$RHSmap1.setEvent("fight");
end`
这给了我以下的错误
[错误:无法使用严格模式解析方法:com.orkash.EnrichmentService.EnrichmentController.tempJsonToClass.EsRootDoc.setEvent(java.lang.String)]
[近:{…$RHSmap1.setEvent(“打架”);…}]
我需要在RHS中提供一个检查:-如果EsRootDoc有一个字段事件或没有,则Drools中没有任何内容(据我所知)允许您执行所需操作。规则的RHS几乎是纯Java。基本规则是:如果不能在Java中完成,就不能在Drools中的规则的RHS中完成 好消息是,可以使用反射在Java中实现您想要做的事情。我建议您创建一个helper类,该类使用反射来设置对象中某个属性(如果该属性存在)的值。您的规则如下所示:
rule 'Some Rule'
when
$RHSmap1:EsRootDoc()
$map1:EsRootDoc($categorylist1:category)
$category2:Category($nlplist2:nlp) from $categorylist1
$nlp2:Nlp(mainCategory=="politics") from $nlplist2
then
Helper.setAttribute($RHSmap1, "event", "fight");
end
希望有帮助,规则的RHS是强类型的。您的
EsRootDoc
类是否有setEvent(String)
方法?否,它没有此方法。我的用例是,在调用setter方法之前,我需要提供一个检查,如果EsRootDoc有event字段,那么只有它应该调用setEvent(String)方法,在普通Java中,您将如何做到这一点?您的EsRootDocument
类看起来怎么样?我假设它的某些子类有这个方法,而其他一些子类没有。对吗?如果您正在动态生成规则和类,那么您可以使用反射来检查setter是否存在并调用它。实际上,EsRootDoc没有字段category,而category是另一个具有字段nlp和crawler的类。Nlp是另一个拥有mainCategory的类,我正在动态生成类,但我希望规则应该静态生成。所以我想在drl中提供一个检查,这样,如果EsRootDoc中有事件,是否有任何方法可以将内容保存在drool变量中,然后检查如果事件存在,那么只调用setter方法