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 来处理内容对象的序列化和反序列化。

注意:它还需要一个默认构造函数。