1

I am newbie to drool usage and i have small query. I have map as below for which i have created pojo using schemaJson2Pojo java api :

{
"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;"
      }]
}

Note : svo.svoMetadata has person name

So, on using schemaJson2Pojo api , following classes are generated :

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;
    }

}

i forward RootDoc to drl and i am trying get an instance of "svoMetadata" as below as wish to update person in drl RHS :

rule in drl is as below:

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????

how do i get SvoMetadata instance to perform setPerson method????

Kimchy
  • 501
  • 8
  • 24
  • I was getting below NPE: pool-1-thread-1" Exception executing consequence for rule "tre" in defaultpkg: java.lang.RuntimeException: cannot invoke method: setPerson at org.drools.core.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39) ... 13 more Caused by: java.lang.NullPointerException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) – Kimchy Jun 06 '17 at 09:50

1 Answers1

0

For others ,who could be looking for drl syntax for above NPE issue.

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

checking svoMetadata!=null solved the problem.

Kimchy
  • 501
  • 8
  • 24