public class ACLMessage extends java.lang.Object implements java.lang.Cloneable, Serializable
private final String
.
All values can be set by using the methods set and can be read by using
the methods get.
Warning: since JADE 3.1 an exception might be thrown during the serialization of the ACLMessage parameters (with exception of the content of the ACLMessage) because of a limitation to 65535 in the total number of bytes needed to represent all the characters of a String (see also java.io.DataOutput#writeUTF(String)).
The methods setByteSequenceContent()
and
getByteSequenceContent()
allow to send arbitrary
sequence of bytes
over the content of an ACLMessage.
The couple of methods
setContentObject()
and
getContentObject()
allow to send
serialized Java objects over the content of an ACLMessage.
These method are not strictly
FIPA compliant so their usage is not encouraged.
Modifier and Type | Field and Description |
---|---|
static int |
ACCEPT_PROPOSAL
constant identifying the FIPA performative
|
static int |
AGREE
constant identifying the FIPA performative
|
static java.lang.String |
AMS_FAILURE_AGENT_NOT_FOUND
AMS failure reasons
|
static java.lang.String |
AMS_FAILURE_AGENT_UNREACHABLE |
static java.lang.String |
AMS_FAILURE_FOREIGN_AGENT_NO_ADDRESS |
static java.lang.String |
AMS_FAILURE_FOREIGN_AGENT_UNREACHABLE |
static java.lang.String |
AMS_FAILURE_SERVICE_ERROR |
static java.lang.String |
AMS_FAILURE_UNAUTHORIZED |
static java.lang.String |
AMS_FAILURE_UNEXPECTED_ERROR |
static int |
CANCEL
constant identifying the FIPA performative
|
static int |
CFP
constant identifying the FIPA performative
|
static int |
CONFIRM
constant identifying the FIPA performative
|
static int |
DISCONFIRM
constant identifying the FIPA performative
|
static java.lang.String |
DONT_NOTIFY_FAILURE
User defined parameter key specifying, when set to "true", that if the delivery of a
message fails, no FAILURE notification has to be sent back to the sender.
|
static int |
FAILURE
constant identifying the FIPA performative
|
static java.lang.String |
IGNORE_FAILURE
User defined parameter key specifying, when set to "true", that if the delivery of a
message fails, no failure handling action must be performed.
|
static int |
INFORM
constant identifying the FIPA performative
|
static int |
INFORM_IF
constant identifying the FIPA performative
|
static int |
INFORM_REF
constant identifying the FIPA performative
|
static java.lang.String |
NO_CLONE
User defined parameter key specifying that this message does not need to be cloned by the message delivery service.
|
static int |
NOT_UNDERSTOOD
constant identifying the FIPA performative
|
static int |
PROPAGATE
constant identifying the FIPA performative
|
static int |
PROPOSE
constant identifying the FIPA performative
|
static int |
PROXY
constant identifying the FIPA performative
|
static int |
QUERY_IF
constant identifying the FIPA performative
|
static int |
QUERY_REF
constant identifying the FIPA performative
|
static java.lang.String |
REAL_SENDER
User defined parameter key specifying the AID of the real sender of a message.
|
static int |
REFUSE
constant identifying the FIPA performative
|
static int |
REJECT_PROPOSAL
constant identifying the FIPA performative
|
static int |
REQUEST
constant identifying the FIPA performative
|
static int |
REQUEST_WHEN
constant identifying the FIPA performative
|
static int |
REQUEST_WHENEVER
constant identifying the FIPA performative
|
static java.lang.String |
SF_TIMEOUT
User defined parameter key specifying that this message must be stored for a
given timeout (in ms) in case it is sent to/from a temporarily disconnected split
container.
|
static int |
SUBSCRIBE
constant identifying the FIPA performative
|
static java.lang.String |
SYNCH_DELIVERY
User defined parameter key specifying that this message must be delivered synchronously.
|
static java.lang.String |
TRACE
User defined parameter key specifying that the JADE tracing mechanism should be activated for this message.
|
static int |
UNKNOWN
constant identifying an unknown performative
|
Constructor and Description |
---|
ACLMessage()
Deprecated.
Since every ACL Message must have a message type, you
should use the new constructor which gets a message type as a
parameter. To avoid problems, now this constructor silently sets
the message type to
not-understood . |
ACLMessage(int perf)
This constructor creates an ACL message object with the specified
performative.
|
Modifier and Type | Method and Description |
---|---|
void |
addReceiver(AID r)
Adds a value to
:receiver slot. |
void |
addReplyTo(AID dest)
Adds a value to
:reply-to slot. |
void |
addUserDefinedParameter(java.lang.String key,
java.lang.String value)
Add a new user defined parameter to this ACLMessage.
|
void |
clearAllReceiver()
Removes all values from
:receiver
slot. |
void |
clearAllReplyTo()
Removes all values from
:reply_to
slot. |
java.lang.Object |
clearUserDefinedParameter(java.lang.String key)
Removes the key and its corresponding value from the list of user
defined parameters in this ACLMessage.
|
java.lang.Object |
clone()
Clone an
ACLMessage object. |
ACLMessage |
createReply()
create a new ACLMessage that is a reply to this message.
|
Iterator |
getAllIntendedReceiver()
retrieve the whole list of intended receivers for this message.
|
static java.lang.String[] |
getAllPerformativeNames()
Returns the list of the communicative acts as an array of
String . |
Iterator |
getAllReceiver()
Reads
:receiver slot. |
Iterator |
getAllReplyTo()
Reads
:reply_to slot. |
Properties |
getAllUserDefinedParameters()
Return all user defined parameters of this ACLMessage in form of a Properties object
|
byte[] |
getByteSequenceContent()
Reads
:content slot. |
java.lang.String |
getContent()
Reads
:content slot. |
java.io.Serializable |
getContentObject()
This method returns the content of this ACLMessage when they have
been written via the method
setContentObject . |
java.lang.String |
getConversationId()
Reads
:conversation-id slot. |
java.lang.String |
getEncoding()
Reads
:encoding slot. |
Envelope |
getEnvelope()
Reads the envelope attached to this message, if any.
|
java.lang.String |
getInReplyTo()
Reads
:reply-to slot. |
static int |
getInteger(java.lang.String perf)
Returns the integer corresponding to the performative
|
java.lang.String |
getLanguage()
Reads
:language slot. |
java.lang.String |
getOntology()
Reads
:ontology slot. |
int |
getPerformative()
return the integer representing the performative of this object
|
static java.lang.String |
getPerformative(int perf)
Returns the string corresponding to the integer for the performative
|
long |
getPostTimeStamp() |
java.lang.String |
getProtocol()
Reads
:protocol slot. |
java.lang.String |
getReplyBy()
Deprecated.
Since the value of this slot is a Date by definition, then
the
getReplyByDate should be used that returns a Date |
java.util.Date |
getReplyByDate()
Reads
:reply-by slot. |
java.lang.String |
getReplyWith()
Reads
:reply-with slot. |
AID |
getSender()
Reads
:sender slot. |
java.lang.String |
getUserDefinedParameter(java.lang.String key)
Searches for the user defined parameter with the specified key.
|
boolean |
hasByteSequenceContent()
This method allows to check if the content of this ACLMessage
is a byteSequence or a String
|
boolean |
removeReceiver(AID r)
Removes a value from
:receiver
slot. |
boolean |
removeReplyTo(AID dest)
Removes a value from
:reply_to
slot. |
boolean |
removeUserDefinedParameter(java.lang.String key)
Removes the key and its corresponding value from the list of user
defined parameters in this ACLMessage.
|
void |
reset()
Resets all the message slots.
|
void |
setAllUserDefinedParameters(Properties userDefProps)
Replace all user defined parameters of this ACLMessage with the specified Properties object.
|
void |
setByteSequenceContent(byte[] byteSequenceContent)
Writes the
:content slot. |
void |
setContent(java.lang.String content)
Writes the
:content slot. |
void |
setContentObject(java.io.Serializable s)
This method sets the content of this ACLMessage to a Java object.
|
void |
setConversationId(java.lang.String str)
Writes the
:conversation-id slot. |
void |
setDefaultEnvelope()
Writes the message envelope for this message, using the
:sender and :receiver message slots to
fill in the envelope. |
void |
setEncoding(java.lang.String str)
Writes the
:encoding slot. |
void |
setEnvelope(Envelope e)
Attaches an envelope to this message.
|
void |
setInReplyTo(java.lang.String reply)
Writes the
:in-reply-to slot. |
void |
setLanguage(java.lang.String str)
Writes the
:language slot. |
void |
setOntology(java.lang.String str)
Writes the
:ontology slot. |
void |
setPerformative(int perf)
set the performative of this ACL message object to the passed constant.
|
void |
setPostTimeStamp(long time) |
void |
setProtocol(java.lang.String str)
Writes the
:protocol slot. |
void |
setReplyByDate(java.util.Date date)
Writes the
:reply-by slot. |
void |
setReplyWith(java.lang.String reply)
Writes the
:reply-with slot. |
void |
setSender(AID s)
Writes the
:sender slot. |
ACLMessage |
shallowClone()
Normal clone() method actually perform a deep-clone of the ACLMessage object.
|
java.lang.String |
toString()
Convert an ACL message to its string representation.
|
public static final int ACCEPT_PROPOSAL
public static final int AGREE
public static final int CANCEL
public static final int CFP
public static final int CONFIRM
public static final int DISCONFIRM
public static final int FAILURE
public static final int INFORM
public static final int INFORM_IF
public static final int INFORM_REF
public static final int NOT_UNDERSTOOD
public static final int PROPOSE
public static final int QUERY_IF
public static final int QUERY_REF
public static final int REFUSE
public static final int REJECT_PROPOSAL
public static final int REQUEST
public static final int REQUEST_WHEN
public static final int REQUEST_WHENEVER
public static final int SUBSCRIBE
public static final int PROXY
public static final int PROPAGATE
public static final int UNKNOWN
public static final java.lang.String IGNORE_FAILURE
public static final java.lang.String DONT_NOTIFY_FAILURE
public static final java.lang.String TRACE
public static final java.lang.String NO_CLONE
public static final java.lang.String SYNCH_DELIVERY
public static final java.lang.String REAL_SENDER
public static final java.lang.String SF_TIMEOUT
public static final java.lang.String AMS_FAILURE_AGENT_NOT_FOUND
public static final java.lang.String AMS_FAILURE_AGENT_UNREACHABLE
public static final java.lang.String AMS_FAILURE_SERVICE_ERROR
public static final java.lang.String AMS_FAILURE_UNAUTHORIZED
public static final java.lang.String AMS_FAILURE_FOREIGN_AGENT_UNREACHABLE
public static final java.lang.String AMS_FAILURE_FOREIGN_AGENT_NO_ADDRESS
public static final java.lang.String AMS_FAILURE_UNEXPECTED_ERROR
public ACLMessage()
not-understood
.ACLMessage(int)
public ACLMessage(int perf)
not-understood
.public static java.lang.String[] getAllPerformativeNames()
String
.public void setSender(AID s)
:sender
slot. Warning: no
checks are made to validate the slot value.source
- The new value for the slot.getSender()
public void addReceiver(AID r)
:receiver
slot. Warning:
no checks are made to validate the slot value.r
- The value to add to the slot value set.public boolean removeReceiver(AID r)
:receiver
slot. Warning: no checks are made to validate the slot
value.r
- The value to remove from the slot value set.public void clearAllReceiver()
:receiver
slot. Warning: no checks are made to validate the slot
value.public void addReplyTo(AID dest)
:reply-to
slot. Warning:
no checks are made to validate the slot value.dest
- The value to add to the slot value set.public boolean removeReplyTo(AID dest)
:reply_to
slot. Warning: no checks are made to validate the slot
value.dest
- The value to remove from the slot value set.public void clearAllReplyTo()
:reply_to
slot. Warning: no checks are made to validate the slot
value.public void setPerformative(int perf)
INFORM, REQUEST, ...
)
defined in this classpublic void setContent(java.lang.String content)
:content
slot. Warning: no
checks are made to validate the slot value.
Notice that, in general, setting a String content and getting
back a byte sequence content - or viceversa - does not return
the same value, i.e. the following relation does not hold
getByteSequenceContent(setByteSequenceContent(getContent().getBytes()))
is equal to getByteSequenceContent()
content
- The new value for the slot.getContent()
,
setByteSequenceContent(byte[])
,
setContentObject(Serializable s)
public void setByteSequenceContent(byte[] byteSequenceContent)
:content
slot. Warning: no
checks are made to validate the slot value.
Notice that, in general, setting a String content and getting
back a byte sequence content - or viceversa - does not return
the same value, i.e. the following relation does not hold
getByteSequenceContent(setByteSequenceContent(getContent().getBytes()))
is equal to getByteSequenceContent()
byteSequenceContent
- The new value for the slot.setContent(String s)
,
getByteSequenceContent()
,
setContentObject(Serializable s)
public void setContentObject(java.io.Serializable s) throws java.io.IOException
ACLMessage msg = new ACLMessage(ACLMessage.INFORM); Date d = new Date(); try{ msg.setContentObject(d); }catch(IOException e){}
s
- the object that will be used to set the content of the ACLMessage.java.io.IOException
- if an I/O error occurs.public java.io.Serializable getContentObject() throws UnreadableException
setContentObject
.
It is not FIPA compliant so its usage is not encouraged.
For example to read Java objects from the content
ACLMessage msg = blockingReceive(); try{ Date d = (Date)msg.getContentObject(); }catch(UnreadableException e){}
UnreadableException
- when an error occurs during the decoding.public void setReplyWith(java.lang.String reply)
:reply-with
slot. Warning: no
checks are made to validate the slot value.reply
- The new value for the slot.getReplyWith()
public void setInReplyTo(java.lang.String reply)
:in-reply-to
slot. Warning: no
checks are made to validate the slot value.reply
- The new value for the slot.getInReplyTo()
public void setEncoding(java.lang.String str)
:encoding
slot. Warning: no
checks are made to validate the slot value.str
- The new value for the slot.getEncoding()
public void setLanguage(java.lang.String str)
:language
slot. Warning: no
checks are made to validate the slot value.str
- The new value for the slot.getLanguage()
public void setOntology(java.lang.String str)
:ontology
slot. Warning: no
checks are made to validate the slot value.str
- The new value for the slot.getOntology()
public void setReplyByDate(java.util.Date date)
:reply-by
slot. Warning: no
checks are made to validate the slot value.date
- The new value for the slot.getReplyByDate()
public void setProtocol(java.lang.String str)
:protocol
slot. Warning: no
checks are made to validate the slot value.str
- The new value for the slot.getProtocol()
public void setConversationId(java.lang.String str)
:conversation-id
slot. Warning: no
checks are made to validate the slot value.str
- The new value for the slot.getConversationId()
public Iterator getAllReceiver()
:receiver
slot.Iterator
containing the Agent IDs of the
receiver agents for this message.public Iterator getAllReplyTo()
:reply_to
slot.Iterator
containing the Agent IDs of the
reply_to agents for this message.public AID getSender()
:sender
slot.:sender
slot.setSender(AID).
public static java.lang.String getPerformative(int perf)
public static int getInteger(java.lang.String perf)
public int getPerformative()
public boolean hasByteSequenceContent()
public java.lang.String getContent()
:content
slot.
Notice that, in general, setting a String content and getting
back a byte sequence content - or viceversa - does not return
the same value, i.e. the following relation does not hold
getByteSequenceContent(setByteSequenceContent(getContent().getBytes()))
is equal to getByteSequenceContent()
:content
slot.setContent(String)
,
getByteSequenceContent()
,
getContentObject()
public byte[] getByteSequenceContent()
:content
slot.
Notice that, in general, setting a String content and getting
back a byte sequence content - or viceversa - does not return
the same value, i.e. the following relation does not hold
getByteSequenceContent(setByteSequenceContent(getContent().getBytes()))
is equal to getByteSequenceContent()
:content
slot.getContent()
,
setByteSequenceContent(byte[])
,
getContentObject()
public java.lang.String getReplyWith()
:reply-with
slot.:reply-with
slot.setReplyWith(String).
public java.lang.String getInReplyTo()
:reply-to
slot.:reply-to
slot.setInReplyTo(String).
public java.lang.String getEncoding()
:encoding
slot.:encoding
slot.setEncoding(String).
public java.lang.String getLanguage()
:language
slot.:language
slot.setLanguage(String).
public java.lang.String getOntology()
:ontology
slot.:ontology
slot.setOntology(String).
public java.lang.String getReplyBy()
getReplyByDate
should be used that returns a Date:reply-by
slot.:reply-by
slot, as a string.getReplyByDate().
public java.util.Date getReplyByDate()
:reply-by
slot.:reply-by
slot, as a
Date
object.setReplyByDate(Date).
public java.lang.String getProtocol()
:protocol
slot.:protocol
slot.setProtocol(String).
public java.lang.String getConversationId()
:conversation-id
slot.:conversation-id
slot.setConversationId(String).
public void addUserDefinedParameter(java.lang.String key, java.lang.String value)
key
- the property key.value
- the property valuepublic java.lang.String getUserDefinedParameter(java.lang.String key)
null
if the parameter is not found.key
- the parameter key.public Properties getAllUserDefinedParameters()
public void setAllUserDefinedParameters(Properties userDefProps)
public boolean removeUserDefinedParameter(java.lang.String key)
key
- the key that needs to be removedpublic java.lang.Object clearUserDefinedParameter(java.lang.String key)
key
- the key that needs to be removedpublic void setPostTimeStamp(long time)
public long getPostTimeStamp()
public void setEnvelope(Envelope e)
e
- The Envelope
object to attach to this
message.jade.lang.acl
,
jade.lang.acl
public void setDefaultEnvelope()
:sender
and :receiver
message slots to
fill in the envelope.jade.lang.acl
,
jade.lang.acl
public Envelope getEnvelope()
jade.lang.acl
,
jade.lang.acl
public java.lang.String toString()
ACLMessage
into a
character string.
If the content is a bytesequence, then it is automatically converted
into Base64 encoding.toString
in class java.lang.Object
String
representing this message.public java.lang.Object clone()
ACLMessage
object.clone
in class java.lang.Object
ACLMessage
object. The copy
must be casted back to ACLMessage
type before being
used.public ACLMessage shallowClone()
public void reset()
public ACLMessage createReply()
public Iterator getAllIntendedReceiver()