我是流口水的新手,我的查询很少。 我有如下地图,我使用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方法????
答案 0 :(得分:0)
对于其他人,谁可能正在为上述NPE问题寻找drl语法。
$mastermap : EsRootDoc($svolist:svo)
$svo : Svo($svoMetadata2 : svoMetadata!=null,svoMetadata.person!=null) from $svolist
检查svoMetadata!= null解决了问题。