Subject: Problem with message encoding / ContentManager
From: Ralph Grove (groverf@jmu.edu)
Date: Mon Dec 09 2002 - 17:49:00 MET
I'm having a problem using the ContentManager fillContent and
extractContent methods with Jade 2.5.
In this application, a SocketProxyAgent handles communication between a
servlet and an agent.
Here, the servlet is using a ContentManager to encode an ACLMessage:
public ServiceRequestProto(SocketProxyCommunicator communicator, AID
receiver, String act, ContentElement content) throws FIPAException {
myOut = communicator.getStream();
notYetReady = true;
spc = communicator;
myParser = spc.getParser();
reqMsg = new ACLMessage(ACLMessage.getInteger(act));
reqMsg.addReceiver(receiver);
reqMsg.setProtocol("fipa-request");
reqMsg.setLanguage(FIPANames.ContentLanguage.FIPA_SL);
reqMsg.setOntology(RecreationalTourismOntology.ONTOLOGY_NAME);
reqMsg.setReplyWith("rw"+(new Date()).getTime());
reqMsg.setConversationId("conv"+(new Date()).getTime());
cm = new ContentManager();
cm.registerLanguage(new SLCodec());
cm.registerOntology(RecreationalTourismOntology.getInstance());
try {
cm.fillContent(reqMsg, content);
}
catch (CodecException e) {e.printStackTrace();}
catch (OntologyException e) {e.printStackTrace();}
}
The service agent then uses its ContentManager to extract the message
that it receives from the SocketProxyAgent:
class WaitMessageAndReplyBehavior extends SimpleBehaviour {
private boolean finished = false;
public WaitMessageAndReplyBehavior (Agent a) {
super(a);
}
public void action() {
ACLMessage msg = blockingReceive();
...
try {
ContentElement ce = getContentManager().extractContent(msg);
...
In one case, the ConceptElement being passed is a Predicate
(Understands) with a single String attribute ("PARK"). This works fine.
The message is encoded as:
((Understands PARK))
In another case, the ConceptElement being passed is an AgentAction
(Lookup) with a single attribute that is a Concept (Park) that has
multiple attributes. In this case, the message is encoded as:
((Lookup :OBJECT (Park :PARKACTIVITY hiking :PARKNAME none :URL none
:PARKFACILITY restrooms)))
A CodecException occurs in the second case:
jade.content.lang.Codec$CodecException: Parse exception [nested message
is: Enco
untered ":OBJECT" at line 1, column 10.
Was expecting one of:
"(" ...
<VARIABLE> ...
<INTEGER> ...
<HEXINTEGER> ...
<FLOATONE> ...
<FLOATTWO> ...
<WORD> ...
<STRING_LITERAL> ...
<DATETIME> ...
"(" ...
<WORD2> ...
<STRING_LITERAL2> ...
]
at jade.content.lang.sl.SLCodec.decode(SLCodec.java:347)
at jade.content.ContentManager.decode(ContentManager.java:297)
at jade.content.ContentManager.extractContent(ContentManager.java:221)
at HarrisonburgOutdoors.ParkFinder.ParkFinder$WaitMessageAndReplyBehavio
r.action(ParkFinder.java:81)
at jade.core.behaviours.Behaviour.actionWrapper(Behaviour.java:246)
at jade.core.Agent.mainLoop(Agent.java:1705)
at jade.core.Agent.run(Agent.java:1525)
at java.lang.Thread.run(Thread.java:536)
Nested Exception is:
jade.content.lang.sl.ParseException: Encountered ":OBJECT" at line 1,
column 10.
Was expecting one of:
"(" ...
<VARIABLE> ...
<INTEGER> ...
<HEXINTEGER> ...
<FLOATONE> ...
<FLOATTWO> ...
<WORD> ...
<STRING_LITERAL> ...
<DATETIME> ...
"(" ...
<WORD2> ...
<STRING_LITERAL2> ...
at jade.content.lang.sl.SLParser.generateParseException(SLParser.java:92
4)
at jade.content.lang.sl.SLParser.jj_consume_token(SLParser.java:860)
at jade.content.lang.sl.SLParser.Term(SLParser.java:312)
at jade.content.lang.sl.SLParser.Wff_NoBrace(SLParser.java:671)
at jade.content.lang.sl.SLParser.ContentExpression_NoBrace(SLParser.java
:237)
at jade.content.lang.sl.SLParser.ContentExpression(SLParser.java:206)
at jade.content.lang.sl.SLParser.Content(SLParser.java:137)
at jade.content.lang.sl.SLParser.parse(SLParser.java:78)
at jade.content.lang.sl.SLCodec.decode(SLCodec.java:345)
at jade.content.ContentManager.decode(ContentManager.java:297)
at jade.content.ContentManager.extractContent(ContentManager.java:221)
at HarrisonburgOutdoors.ParkFinder.ParkFinder$WaitMessageAndReplyBehavio
r.action(ParkFinder.java:81)
at jade.core.behaviours.Behaviour.actionWrapper(Behaviour.java:246)
at jade.core.Agent.mainLoop(Agent.java:1705)
at jade.core.Agent.run(Agent.java:1525)
at java.lang.Thread.run(Thread.java:536)
I've posted the source files (Protege and java) at
http://www.cs.jmu.edu/users/groverf/agentfiles .
Any advice about a possible solution would be appreciated.
Thanks,
--------
Ralph Grove
James Madison University
groverf@jmu.edu
This archive was generated by hypermail 2a22 : Mon Dec 09 2002 - 17:47:56 MET