我正在读取一个json文件,它有我要映射到pojo类的records.that记录,这个类是从json模式动态生成的,我使用了json2pojo maven plugin!.now,我想在那个类上触发一些规则。但是我不能将drl文件中的类作为字段的fact.same。下面是drl规则。
rule "not null"
when
obj:Class(fieldName==null)
then
//take action
end
这个类和fieldName是动态生成的。关于这个问题,请给我建议解决方案。谢谢。
发布于 2016-02-07 00:15:18
我已经成功地实现了类似的问题陈述。快速浏览一下。我应该在web应用程序中运行时由用户选择的sql表上动态生成规则。这里需要注意的一点是,pojo类也应该在运行时生成。Drools 6有一个内置的API (类似于JAVA反射API),您可以在其中动态生成类,因此也可以生成factTypes。首先是.drl文件:
declare {insert tablename as chosen by the user}
{columnname} : {columntype}
{columnname} : {columntype}
end
这将生成一个pojo类,以及可在规则中直接访问的属性的getter和setter。现在,java文件:
生成的类可以在java应用中访问,如下所示:
//获取声明的FactType
FactType tableType = kbase.getFactType({packagename},{tablename});
//创建实例:
Object obj = tableType.newInstance();
现在,通过hibernate实现了从sql插入与所选表相对应的事实。如果规则进行了任何修改,这也会使表保持更新。
请随时提出任何问题。乐意为您效劳..:)
发布于 2016-02-04 13:05:06
我根据我的requirement.It找到了一种不同的方法,我动态地删除了生成的POJO。我创建了一个POJO作为“参数”,它将被用作事实type.In,我在drl文件中有fieldName(Json字段路径),rulesToFire(规则)和json records.so列表的字段,我可以获取那些我可以读取的values.using com.jayway.jsonpath.JsonPath。
发布于 2016-02-03 21:34:12
JSON适合于通过线路发送数据,等等。但是,您应该将其转换为POJO,并根据Java对象编写验证规则。我看不出你为什么不能这么做。
然而..。如果你想花很多时间和精力...
您可以使用XML完成这些操作,XML是数据集(“记录”)的另一种(文本)表示形式。查看JSON结构定义,您可以看到您有“对象”和“数组”。这些将是您的事实类型。(JS-)对象可以由包含映射的POJO表示,(JS-)数组可以由具有java.util.List字段的POJO实现。
您可以编写选择JS对象并执行字段检查的规则。
https://stackoverflow.com/questions/35172555
复制相似问题