Jade Content Manager вызывает конструктор по умолчанию при извлечении содержимого сообщения - PullRequest
0 голосов
/ 01 декабря 2019

Я отправляю сообщение, содержащее концепцию из моей онтологии, между двумя агентами. Объект 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.

Почему это происходит и как я могу предотвратить это?

1 Ответ

0 голосов
/ 03 декабря 2019

Я решил проблему, поэтому подумал, что отвечу на нее для будущих пользователей, особенно потому, что по этой теме доступно не так много.

В этом случае возникли две проблемы:

Во-первых, использование HashMap в концепт-объекте онтологии. Очевидно, Менеджер контента Jade не очень хорошо работает с сериализацией HashMaps . Я знаю это только по совокупному опыту себя, моих профессоров и одноклассников.

Во-вторых, сеттеры в моем 'conceptObject' были настроены как частные. Я не знал в то время, но Менеджер контента Джейд требует открытых сеттеров для обработки сериализации и десериализации объектов контента.

Примечание. Также требуется конструктор по умолчанию.

...