java - Jade 内容管理器在提取消息内容时调用默认构造函数

标签 java acl agents-jade multi-agent

我正在两个代理之间发送一条消息,其中包含我的本体中的概念。 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/

相关文章:

linux - setfacl 不适用于大括号扩展

java - 创建代理计算器

java - jade error agent a1 在没有被正确终止的情况下死亡。错误状态 2

java - Jboss Oracle JDBC 连接失败

java - 如何使用Prometheus监控集群?

acl - mosquitto 1.4 - 一旦启用 ACL 运行,就会获取 "Socket error on client <unknown>, disconnecting"

java - Spring Security ACL(访问控制列表)如何处理每个对象标识具有多个权限的主体?

java - 从本地代码访问 JADE 代理

java - 如何在 spring boot 属性文件中使用时间戳?

java - 我的 fxgl 遇到非法状态异常 : EntityFactory was not set!