我正在尝试通过KieSession
API序列化KieMarshaller
!但是由于尝试序列化不是事实的对象而失败!
为了清楚起见,我在会话中检索了所有事实:
kieSession.getFactHandleS();
我有10个事实;
我还实现了被动ObjectMarshallingStrategyAcceptor
来记录在封送处理期间迭代的对象:
ObjectMarshallingStrategyAcceptor filterCI = new ObjectMarshallingStrategyAcceptor() {
@Override
public boolean accept(Object object) {
System.out.println(object.getClass().getName());
return true;
}
};
ObjectMarshallingStrategy realSerialization =
marshallers.newSerializeMarshallingStrategy(filterCI);
Marshaller marshaller =
services.getMarshallers().newMarshaller(
base,
new ObjectMarshallingStrategy[]{ realSerialization }
);
运行代码时,它记录了30行!
以下是我的规则示例:
global Service srv;
rule "Catch X"
when
x : X()
y : Y() from srv.load(x.uri)
then
System.out.println(x.toString() + y.toString());
end
我只在会话中插入10个X
对象,但是当我登录filterCI
时,看到20条X
和10条Y
行/日志;我没有将Y插入工作内存,而是使用from
游标加载它!但Marshaller尝试对其进行序列化(虽然这不是事实),并且由于Y
未实现Serializable
接口而面临序列化错误。