Jade 内容管理器在消息内容提取时调用默认构造函数
Jade content manager calling default constructor upon message content extraction
我正在两个代理之间发送一条包含我 ontology 的概念的消息。 Concept 对象被封装在一个动作中,编码如下:
SendAction sendObject = new SendAction ("action info", conceptObject);
Action action = new Action();
action.setAction(sendObject);
action.setActor(getAID());
getContentManager().fillContent(message, action);
但是,在接收方代理中解码消息内容时,如下所示:
ContentElement content = getContentManager().extractContent(message);
调用概念对象的默认构造函数,因此提取包含空概念对象的 'SendAction' 而不是我编码的对象。
有趣的是,'Send Action' 本身被正确编码和解码,因为 "action info" 字符串仍然存在。只有 conceptObject 是默认的。
为什么会发生这种情况,我该如何预防?
我已经解决了这个问题,所以我想我会为未来的用户回答这个问题,特别是因为网上没有太多关于这个主题的内容。
在这种情况下,有两个问题:
首先,在ontology的'conceptObject'中使用了一个HashMap。显然 Jade 的内容管理器不能很好地处理 HashMaps 的序列化。我只是从我自己、我的教授和同学的综合经验中知道这一点。
其次,我的 'conceptObject' 上的设置器被设置为私有。
当时我并不知道,Jade 的内容管理器需要 public setters 来处理内容对象的序列化和反序列化。
注意:它还需要一个默认构造函数。
我正在两个代理之间发送一条包含我 ontology 的概念的消息。 Concept 对象被封装在一个动作中,编码如下:
SendAction sendObject = new SendAction ("action info", conceptObject);
Action action = new Action();
action.setAction(sendObject);
action.setActor(getAID());
getContentManager().fillContent(message, action);
但是,在接收方代理中解码消息内容时,如下所示:
ContentElement content = getContentManager().extractContent(message);
调用概念对象的默认构造函数,因此提取包含空概念对象的 'SendAction' 而不是我编码的对象。
有趣的是,'Send Action' 本身被正确编码和解码,因为 "action info" 字符串仍然存在。只有 conceptObject 是默认的。
为什么会发生这种情况,我该如何预防?
我已经解决了这个问题,所以我想我会为未来的用户回答这个问题,特别是因为网上没有太多关于这个主题的内容。
在这种情况下,有两个问题:
首先,在ontology的'conceptObject'中使用了一个HashMap。显然 Jade 的内容管理器不能很好地处理 HashMaps 的序列化。我只是从我自己、我的教授和同学的综合经验中知道这一点。
其次,我的 'conceptObject' 上的设置器被设置为私有。 当时我并不知道,Jade 的内容管理器需要 public setters 来处理内容对象的序列化和反序列化。
注意:它还需要一个默认构造函数。