2017-06-06 3 views
1

Je suis débutant à baver l'utilisation et j'ai petite requête. Je mapper comme ci-dessous pour laquelle j'ai créé POJO en utilisant schemaJson2Pojo java api:Comment faire pour obtenir des drools imbriqués de classe

{ 
"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 a personne Nom

Ainsi, sur l'utilisation schemaJson2Pojo api, les classes suivantes sont générées:

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

} 

Je transmets RootDoc ​​à DRL et je suis en train obtenir une instance de « svoMetadata » comme ci-dessous que souhaitent mettre à jour personne DRL RHS:

règle DRL est comme ci-dessous:

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

comment puis-je par exemple SvoMetadata pour exécuter la méthode de setPerson ????

+0

je devenais ci-dessous NPE: piscine-1-fil-1" Exception exécution conséquence de la règle "tre" en defaultpkg: java.lang.RuntimeException: ne peut pas invoquer la méthode: setPerson \t à org.drools.core.runtime .rule.impl.DefaultConsequenceExceptionHandler.handleException (DefaultConsequenceExceptionHandler.java:39) \t \t ... 13 plus causés par: java.lang.NullPointerException \t à sun.reflect.NativeMethodAccessorImpl.invoke0 (Méthode natif) – user3152549

Répondre

0

Pour d'autres, qui pourraient être à la recherche de la syntaxe drl pour le problème ci-dessus NPE.

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

La vérification svoMetadata! = Null a résolu le problème.