提供检查RHS中djool中pojo内部存在的字段

时间:2017-09-27 08:46:11

标签: drools

我是流口水的新手。 我想在RHS中检查POJO中是否存在字段。

 {
  "category": [
    {
      "nlp": [
        {
          "mainCategory": "Politics"
        }
      ],
      "crawler": [
        {
          "isNLP": true,
          "mainCategory": "Politics"
        }
      ]
    }
  ]
}

这是生成的pojo列表

  1. EsRootDoc.java
  2. Crawler.java
  3. Nlp.java
  4. EsRootDoc是主要的类,它有方法和字段.when

        $RHSmap1:EsRootDoc()
        and
    
        $map1:EsRootDoc($categorylist1:category)
    
        $category2:Category($nlplist2:nlp) from $categorylist1
    
        $nlp2:Nlp(mainCategory=="politics") from $nlplist2
    
    
    
    then
    
        $RHSmap1.setEvent("fight");
    
    end`
    

    这给了我以下错误

      

    [错误:无法使用strict-mode解析方法:com.orkash.EnrichmentService.EnrichmentController.tempJsonToClass.EsRootDoc.setEvent(java.lang.String)]   [近:{... $ RHSmap1.setEvent(" fight"); ....}]

    我需要提供RHS检查: - 如果 EsRootDoc 事件字段

1 个答案:

答案 0 :(得分:1)

Drools中没有任何东西(据我所知)可以让你做你想要的。规则的RHS是 - 几乎纯粹的Java。那么基本规则是:如果它不能用Java完成,那就不能在Drools中的规则的RHS中完成。

好消息是,您尝试做的事情可以通过反射在Java中实现。我建议您创建一个帮助器类,如果该属性存在,则使用反射来设置对象中属性的值。那么您的规则将如下所示:

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

希望它有所帮助,