1
以下是我在我的DLR文件:Drools 6.2如何在声明的类型中使用ArrayList?
package mytypes;
declare Person
firstName : String
lastName : String
address : java.util.ArrayList
end
declare Address
city : String
state : String
end
rule "city"
when
p : Person()
Address(city == "Dallas") from p.address
then
System.out.println("city rule fired");
end
我用GSON我的JSON转换为ojbect使用FactType类型的人。见下图:
FactType ft = base.getFactType("mytypes","Person");
Object oPerson = ft.newInstance();
Gson gConverter = new Gson();
Object input = gConverter.fromJson(fact, oPerson.getClass());
这里是我的JSON:
{"firstName":"John","lastName":"Smith","address":[{"city":"Dallas","state":"TX"}]}
我得到的对象返回。这是它的外观在内存:
Person(firstName=John, lastName=Smith, address=[{city=Irving, state=TX}])
我的规则不被解雇,因为你可以看到有没有地址型地址内部集合。有谁知道如何使它工作?另外,如果我不使用json来获取Person对象,并且使用“getFactType”手动构建它,并使用“set”来设置属性,那么我能够让我的规则被解雇。这是我如何手动构建它
FactType ftPerson = base.getFactType("mytypes","Person");
Object oPerson = ft.newInstance();
ArrayList al = new ArrayList();
FactType ftAddress = base.getFactType("mytypes","Address");
Object add = ftAddress.newInstance();
ftAddress.set(add, "city", "Dallas");
ftAddress.set(add, "state", "TX");
al.add(add);
ftPerson.set(oPerson, "address", al);
这是Person对象的外观在内存中,并注意地址类型是如何在地址指定集合:
Person(firstName=null, lastName=null, address=[Address(city=Irving, state=TX)])
我希望我已经解释了完整的场景。我如何仍然可以使用json并使其继续工作?
krautmeyer,非常感谢!有效。 –