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,非常感謝!有效。 –