我正在两个代理之间发送一条消息,其中包含我的本体中的概念。 Concept 对象被封装在一个 Action 中,并像这样编码:
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”,而不是我编码的对象。
有趣的是,“发送操作”本身被正确编码和解码,因为“操作信息”字符串仍然存在。只有conceptObject是默认的。
为什么会发生这种情况?我该如何预防?
最佳答案
我已经解决了这个问题,所以我想为 future 的用户回答这个问题,特别是因为网上没有太多关于这个主题的信息。
在本例中,存在两个问题:
首先,在本体的“conceptObject”中使用 HashMap。显然Jade 的内容管理器不能很好地处理 HashMap 的序列化。我只是根据我自己、我的教授和同学的综合经验才知道这一点。
其次,我的“conceptObject”上的 setter 被设置为私有(private)。 我当时并不知道,Jade 的内容管理器需要公共(public) setter 才能处理内容对象的序列化和反序列化。
注意:它还需要一个默认构造函数。
关于java - Jade 内容管理器在提取消息内容时调用默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59120404/