如何获取嵌套类实例drools

时间:2017-06-06 07:39:42

标签: java json drools pojo jsonschema2pojo

我是流口水的新手,我的查询很少。 我有如下地图,我使用schemaJson2Pojo java api创建了pojo:

{
"svo": [
      {
        "clause": "Sunanda Pushkar died of poisoning",
        "svoMetadata": {
          "person": "sunanda pushkar",
          "subjectType": "person_coref"
        },
        "objectPOS": "IN VBG;",
        "isRelatedKeySVO": false,
        "subjectPOS": " NNP NNP",
        "subject": "Sunanda Pushkar",
        "confidence": 0.9266232318014763,
        "verb": "died",
        "verbPOS": "VBN",
        "source": "OpenIE",
        "isKeySVO": true,
        "object": "of poisoning;"
      }]
}

注意:svo.svoMetadata具有人名

因此,在使用schemaJson2Pojo api时,会生成以下类:

class RootDoc
{
 private List<Svo> svo = new ArrayList<Svo>();

 public List<Svo> getSvo() {
        return svo;
    }


    public void setSvo(List<Svo> svo) {
        this.svo = svo;
    }
}

class Svo
{
  private SvoMetadata svoMetadata;

public SvoMetadata getSvoMetadata() {
        return svoMetadata;
    }


    public void setSvoMetadata(SvoMetadata svoMetadata) {
        this.svoMetadata = svoMetadata;
    }
}

class SvoMetadata
{
     private String person;

    public void setPerson(String person) {
        this.person = person;
    }

    public SvoMetadata withPerson(String person) {
        this.person = person;
        return this;
    }

}

我将RootDoc转发给drl,我正在尝试获取“svoMetadata”的实例,如下所示,希望更新drr RHS中的人员:

dr中的

规则如下:

when 
        $mastermap : EsRootDoc($svolist:svo)
    $svo : Svo($svoMetadata2 : svoMetadata) from $svolist
         // $svoMetadata: SvoMetadata($t: $svo.getSvoMetadata())  // this gives me error 
then 
       $svoMetadata.setPerson("taranTaran");  // how do i get SvoMetadata instance to perform setPerson method????

如何让SvoMetadata实例执行setPerson方法????

1 个答案:

答案 0 :(得分:0)

对于其他人,谁可能正在为上述NPE问题寻找drl语法。

    $mastermap : EsRootDoc($svolist:svo)
    $svo : Svo($svoMetadata2 : svoMetadata!=null,svoMetadata.person!=null) from $svolist 

检查svoMetadata!= null解决了问题。