如何使用Drools(mvel)将元素添加到数组中

如何使用Drools(mvel)将元素添加到数组中,drools,mvel,Drools,Mvel,我需要在带有Drools的exist数组中插入一个新值。我的例子是: rule "insert new address" dialect "java" when $data : Data( source.address != null) then Address address = (Address) $data.source.address System.out.println("Element: "+a

我需要在带有Drools的exist数组中插入一个新值。我的例子是:

rule "insert new address"
dialect "java"
when
     $data : Data( source.address != null)
then
     Address address = (Address) $data.source.address
     System.out.println("Element: "+address );
     $data.target.addressList.add(address);
end
发生的错误如下: 规则中规则“插入新地址”的异常执行结果:[错误:$data.target.addressList.add(address):null]

编辑:添加模型

public class Data {
  private Source source;
  private Client target;
}

public class Source {
  ...
  private Address address;
}

public class Client {
  ...
  private List<Address> addressList;
}
公共类数据{
私人来源;
私人客户目标;
}
公共类源{
...
私人地址;
}
公共类客户端{
...
私人名单地址名单;
}

在回答标题中的问题时,即如何向数组中添加元素,答案基本上是“与Java中的方法相同”

要回答您实际提出的问题(没有数组),您的错误实际上是一个NullPointerException,或者是另一个无法修改字段的指示符(例如不可变列表)

这:

表示
$data.target
$data.target.addressList
为空,或者可能
$data.target.addressList
为不可变列表


确保任何“目标”都已初始化,并且其“地址列表”也已初始化为可变列表类型。

什么数组?您的代码中没有数组。如果您输入:System.out.println(“Size”+$data.target.addressList.Size());应用程序写“3”(这是正确的,因为存在3个元素)我在帖子中添加了模型来查看它。你没有说明这些模型是如何初始化的,何时初始化的,也没有说明它们的getter是什么。这些模型是DTO,来自JSON之类的客户端。我发现了问题所在。问题在于:inmmutability的java.lang.UnsupportedOperationException。我用this.addressList=newArrayList(this.addressList)创建了一个方法;然后,添加工作。
Error: $data.target.addressList.add(address): null]