org.exolab.jms.message
Class MapMessageImpl

java.lang.Object
  |
  +--org.exolab.jms.message.MessageImpl
        |
        +--org.exolab.jms.message.MapMessageImpl
All Implemented Interfaces:
java.lang.Cloneable, java.io.Externalizable, javax.jms.MapMessage, javax.jms.Message, java.io.Serializable

public class MapMessageImpl
extends MessageImpl
implements javax.jms.MapMessage

This class implements the MapMessage interface.

A MapMessage is used to send a set of name-value pairs where names are Strings and values are Java primitive types. The entries can be accessed sequentially or randomly by name. The order of the entries is undefined. It inherits from Message and adds a map message body.

The primitive types can be read or written explicitly using methods for each type. They may also be read or written generically as objects. For instance, a call to MapMessage.setInt("foo", 6) is equivalent to MapMessage.setObject("foo", new Integer(6)). Both forms are provided because the explicit form is convenient for static programming and the object form is needed when types are not known at compile time.

When a client receives a MapMessage, it is in read-only mode. If a client attempts to write to the message at this point, a MessageNotWriteableException is thrown. If clearBody() is called, the message can now be both read from and written to.

Map messages support the following conversion table. The marked cases must be supported. The unmarked cases must throw a JMSException. The String to primitive conversions may throw a runtime exception if the primitives valueOf() method does not accept it as a valid String representation of the primitive.

A value written as the row type can be read as the column type.

 |        | boolean byte short char int long float double String byte[]
 |----------------------------------------------------------------------
 |boolean |    X                                            X
 |byte    |          X     X         X   X                  X
 |short   |                X         X   X                  X
 |char    |                     X                           X
 |int     |                          X   X                  X
 |long    |                              X                  X
 |float   |                                    X     X      X
 |double  |                                          X      X
 |String  |    X     X     X         X   X     X     X      X
 |byte[]  |                                                        X
 |----------------------------------------------------------------------
 

Attempting to read a null value as a Java primitive type must be treated as calling the primitive's corresponding valueOf(String) conversion method with a null value. Since char does not support a String conversion, attempting to read a null value as a char must throw NullPointerException.

Version:
$Revision: 1.1 $ $Date: 2004/11/26 01:50:43 $
Author:
Jim Mourikis
See Also:
MapMessage, Serialized Form

Fields inherited from class org.exolab.jms.message.MessageImpl
_acceptedTime, _bodyReadOnly, _connectionId, _processed, _propertiesReadOnly, _sequenceNumber, EMPTY
 
Fields inherited from interface javax.jms.Message
DEFAULT_DELIVERY_MODE, DEFAULT_PRIORITY, DEFAULT_TIME_TO_LIVE
 
Constructor Summary
MapMessageImpl()
          Construct a new MapMessage
 
Method Summary
 void clearBody()
          Clear out the message body.
 java.lang.Object clone()
          Clone an instance of this object
 boolean getBoolean(java.lang.String name)
          Return the boolean value with the given name
 byte getByte(java.lang.String name)
          Return the byte value with the given name
 byte[] getBytes(java.lang.String name)
          Return the byte array value with the given name
 char getChar(java.lang.String name)
          Return the Unicode character value with the given name
 double getDouble(java.lang.String name)
          Return the double value with the given name
 float getFloat(java.lang.String name)
          Return the float value with the given name
 int getInt(java.lang.String name)
          Return the integer value with the given name
 long getLong(java.lang.String name)
          Return the long value with the given name
 java.util.Enumeration getMapNames()
          Return an Enumeration of all the Map message's names.
 java.lang.Object getObject(java.lang.String name)
          Return the Java object value with the given name
 short getShort(java.lang.String name)
          Return the short value with the given name
 java.lang.String getString(java.lang.String name)
          Return the String value with the given name
 boolean itemExists(java.lang.String name)
          Check if an item exists in this MapMessage
 void readExternal(java.io.ObjectInput in)
          Serialize in this message's data
 void setBoolean(java.lang.String name, boolean value)
          Set a boolean value with the given name, into the Map
 void setByte(java.lang.String name, byte value)
          Set a byte value with the given name, into the Map
 void setBytes(java.lang.String name, byte[] value)
          Set a byte array value with the given name, into the Map
 void setBytes(java.lang.String name, byte[] value, int offset, int length)
          Set a portion of the byte array value with the given name, into the Map
 void setChar(java.lang.String name, char value)
          Set a Unicode character value with the given name, into the Map
 void setDouble(java.lang.String name, double value)
          Set a double value with the given name, into the Map
 void setFloat(java.lang.String name, float value)
          Set a float value with the given name, into the Map
 void setInt(java.lang.String name, int value)
          Set an integer value with the given name, into the Map
 void setLong(java.lang.String name, long value)
          Set a long value with the given name, into the Map
 void setObject(java.lang.String name, java.lang.Object value)
          Set a Java object value with the given name, into the Map
 void setShort(java.lang.String name, short value)
          Set a short value with the given name, into the Map
 void setString(java.lang.String name, java.lang.String value)
          Set a String value with the given name, into the Map
 void writeExternal(java.io.ObjectOutput out)
          Serialize out this message's data
 
Methods inherited from class org.exolab.jms.message.MessageImpl
acknowledge, checkPropertyWrite, checkRead, checkWrite, clearProperties, getAcceptedTime, getAckMessageID, getBooleanProperty, getByteProperty, getConnectionId, getConsumerId, getDoubleProperty, getFloatProperty, getId, getIntProperty, getJMSCorrelationID, getJMSCorrelationIDAsBytes, getJMSDeliveryMode, getJMSDestination, getJMSExpiration, getJMSMessageID, getJMSPriority, getJMSRedelivered, getJMSReplyTo, getJMSTimestamp, getJMSType, getLongProperty, getMessageId, getObjectProperty, getProcessed, getPropertyNames, getReadOnly, getSequenceNumber, getShortProperty, getStringProperty, getWildcard, propertyExists, setAcceptedTime, setBooleanProperty, setByteProperty, setConnectionId, setConsumerId, setDoubleProperty, setFloatProperty, setIntProperty, setJMSCorrelationID, setJMSCorrelationIDAsBytes, setJMSDeliveryMode, setJMSDestination, setJMSExpiration, setJMSMessageID, setJMSPriority, setJMSRedelivered, setJMSReplyTo, setJMSTimestamp, setJMSType, setJMSXRcvTimestamp, setLongProperty, setObjectProperty, setProcessed, setReadOnly, setSequenceNumber, setSession, setShortProperty, setStringProperty, setWildcard
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface javax.jms.Message
acknowledge, clearProperties, getBooleanProperty, getByteProperty, getDoubleProperty, getFloatProperty, getIntProperty, getJMSCorrelationID, getJMSCorrelationIDAsBytes, getJMSDeliveryMode, getJMSDestination, getJMSExpiration, getJMSMessageID, getJMSPriority, getJMSRedelivered, getJMSReplyTo, getJMSTimestamp, getJMSType, getLongProperty, getObjectProperty, getPropertyNames, getShortProperty, getStringProperty, propertyExists, setBooleanProperty, setByteProperty, setDoubleProperty, setFloatProperty, setIntProperty, setJMSCorrelationID, setJMSCorrelationIDAsBytes, setJMSDeliveryMode, setJMSDestination, setJMSExpiration, setJMSMessageID, setJMSPriority, setJMSRedelivered, setJMSReplyTo, setJMSTimestamp, setJMSType, setLongProperty, setObjectProperty, setShortProperty, setStringProperty
 

Constructor Detail

MapMessageImpl

public MapMessageImpl()
               throws javax.jms.JMSException
Construct a new MapMessage
Throws:
javax.jms.JMSException - if the message type can't be set
Method Detail

clone

public final java.lang.Object clone()
                             throws java.lang.CloneNotSupportedException
Clone an instance of this object
Overrides:
clone in class MessageImpl
Returns:
a copy of this object
Throws:
java.lang.CloneNotSupportedException - if object or attributes aren't cloneable

writeExternal

public final void writeExternal(java.io.ObjectOutput out)
                         throws java.io.IOException
Serialize out this message's data
Overrides:
writeExternal in class MessageImpl
Parameters:
out - the stream to serialize out to
Throws:
java.io.IOException - if any I/O exceptions occurr

readExternal

public final void readExternal(java.io.ObjectInput in)
                        throws java.lang.ClassNotFoundException,
                               java.io.IOException
Serialize in this message's data
Overrides:
readExternal in class MessageImpl
Parameters:
in - the stream to serialize in from
Throws:
java.lang.ClassNotFoundException - if the class for an object being restored cannot be found.
java.io.IOException - if any I/O exceptions occur

getBoolean

public final boolean getBoolean(java.lang.String name)
                         throws javax.jms.JMSException,
                                javax.jms.MessageFormatException
Return the boolean value with the given name
Specified by:
getBoolean in interface javax.jms.MapMessage
Parameters:
name - the name of the boolean
Returns:
the boolean value with the given name
Throws:
javax.jms.JMSException - if JMS fails to read the message due to some internal JMS error
javax.jms.MessageFormatException - if this type conversion is invalid

getByte

public final byte getByte(java.lang.String name)
                   throws javax.jms.JMSException,
                          javax.jms.MessageFormatException
Return the byte value with the given name
Specified by:
getByte in interface javax.jms.MapMessage
Parameters:
name - the name of the byte
Returns:
the byte value with the given name
Throws:
javax.jms.JMSException - if JMS fails to read the message due to some internal JMS error
javax.jms.MessageFormatException - if this type conversion is invalid

getShort

public final short getShort(java.lang.String name)
                     throws javax.jms.JMSException,
                            javax.jms.MessageFormatException
Return the short value with the given name
Specified by:
getShort in interface javax.jms.MapMessage
Parameters:
name - the name of the short
Returns:
the short value with the given name
Throws:
javax.jms.JMSException - if JMS fails to read the message due to some internal JMS error
javax.jms.MessageFormatException - if this type conversion is invalid

getChar

public final char getChar(java.lang.String name)
                   throws javax.jms.JMSException,
                          javax.jms.MessageFormatException
Return the Unicode character value with the given name
Specified by:
getChar in interface javax.jms.MapMessage
Parameters:
name - the name of the Unicode character
Returns:
the Unicode character value with the given name
Throws:
javax.jms.JMSException - if JMS fails to read the message due to some internal JMS error
javax.jms.MessageFormatException - if this type conversion is invalid

getInt

public final int getInt(java.lang.String name)
                 throws javax.jms.JMSException,
                        javax.jms.MessageFormatException
Return the integer value with the given name
Specified by:
getInt in interface javax.jms.MapMessage
Parameters:
name - the name of the integer
Returns:
the integer value with the given name
Throws:
javax.jms.JMSException - if JMS fails to read the message due to some internal JMS error
javax.jms.MessageFormatException - if this type conversion is invalid

getLong

public final long getLong(java.lang.String name)
                   throws javax.jms.JMSException,
                          javax.jms.MessageFormatException
Return the long value with the given name
Specified by:
getLong in interface javax.jms.MapMessage
Parameters:
name - the name of the long
Returns:
the long value with the given name
Throws:
javax.jms.JMSException - if JMS fails to read the message due to some internal JMS error
javax.jms.MessageFormatException - if this type conversion is invalid

getFloat

public final float getFloat(java.lang.String name)
                     throws javax.jms.JMSException,
                            javax.jms.MessageFormatException
Return the float value with the given name
Specified by:
getFloat in interface javax.jms.MapMessage
Parameters:
name - the name of the float
Returns:
the float value with the given name
Throws:
javax.jms.JMSException - if JMS fails to read the message due to some internal JMS error
javax.jms.MessageFormatException - if this type conversion is invalid

getDouble

public final double getDouble(java.lang.String name)
                       throws javax.jms.JMSException,
                              javax.jms.MessageFormatException
Return the double value with the given name
Specified by:
getDouble in interface javax.jms.MapMessage
Parameters:
name - the name of the double
Returns:
the double value with the given name
Throws:
javax.jms.JMSException - if JMS fails to read the message due to some internal JMS error
javax.jms.MessageFormatException - if this type conversion is invalid

getString

public final java.lang.String getString(java.lang.String name)
                                 throws javax.jms.JMSException,
                                        javax.jms.MessageFormatException
Return the String value with the given name
Specified by:
getString in interface javax.jms.MapMessage
Parameters:
name - the name of the String
Returns:
the String value with the given name. If there is no item by this name, a null value is returned.
Throws:
javax.jms.JMSException - if JMS fails to read the message due to some internal JMS error
javax.jms.MessageFormatException - if this type conversion is invalid

getBytes

public final byte[] getBytes(java.lang.String name)
                      throws javax.jms.JMSException,
                             javax.jms.MessageFormatException
Return the byte array value with the given name
Specified by:
getBytes in interface javax.jms.MapMessage
Parameters:
name - the name of the byte array
Returns:
a copy of the byte array value with the given name. If there is no item by this name, a null value is returned.
Throws:
javax.jms.JMSException - if JMS fails to read the message due to some internal JMS error
javax.jms.MessageFormatException - if this type conversion is invalid

getObject

public final java.lang.Object getObject(java.lang.String name)
                                 throws javax.jms.JMSException
Return the Java object value with the given name

Note that this method can be used to return in objectified format, an object that had been stored in the Map with the equivalent setObject method call, or it's equivalent primitive set method.

Specified by:
getObject in interface javax.jms.MapMessage
Parameters:
name - the name of the Java object
Returns:
a copy of the Java object value with the given name, in objectified format (eg. if it set as an int, then an Integer is returned). Note that byte values are returned as byte[], not Byte[]. If there is no item by this name, a null value is returned.
Throws:
javax.jms.JMSException - if JMS fails to read the message due to some internal JMS error

getMapNames

public final java.util.Enumeration getMapNames()
Return an Enumeration of all the Map message's names.
Specified by:
getMapNames in interface javax.jms.MapMessage
Returns:
an enumeration of all the names in this Map message.

setBoolean

public final void setBoolean(java.lang.String name,
                             boolean value)
                      throws javax.jms.MessageNotWriteableException
Set a boolean value with the given name, into the Map
Specified by:
setBoolean in interface javax.jms.MapMessage
Parameters:
name - the name of the boolean
value - the boolean value to set in the Map
Throws:
javax.jms.MessageNotWriteableException - if the message is in read-only mode

setByte

public final void setByte(java.lang.String name,
                          byte value)
                   throws javax.jms.MessageNotWriteableException
Set a byte value with the given name, into the Map
Specified by:
setByte in interface javax.jms.MapMessage
Parameters:
name - the name of the byte
value - the byte value to set in the Map
Throws:
javax.jms.MessageNotWriteableException - if the message is in read-only mode

setShort

public final void setShort(java.lang.String name,
                           short value)
                    throws javax.jms.MessageNotWriteableException
Set a short value with the given name, into the Map
Specified by:
setShort in interface javax.jms.MapMessage
Parameters:
name - the name of the short
value - the short value to set in the Map
Throws:
javax.jms.MessageNotWriteableException - if the message is in read-only mode

setChar

public final void setChar(java.lang.String name,
                          char value)
                   throws javax.jms.MessageNotWriteableException
Set a Unicode character value with the given name, into the Map
Specified by:
setChar in interface javax.jms.MapMessage
Parameters:
name - the name of the Unicode character
value - the Unicode character value to set in the Map
Throws:
javax.jms.MessageNotWriteableException - if the message is in read-only mode

setInt

public final void setInt(java.lang.String name,
                         int value)
                  throws javax.jms.MessageNotWriteableException
Set an integer value with the given name, into the Map
Specified by:
setInt in interface javax.jms.MapMessage
Parameters:
name - the name of the integer
value - the integer value to set in the Map
Throws:
javax.jms.MessageNotWriteableException - if the message is in read-only mode

setLong

public final void setLong(java.lang.String name,
                          long value)
                   throws javax.jms.MessageNotWriteableException
Set a long value with the given name, into the Map
Specified by:
setLong in interface javax.jms.MapMessage
Parameters:
name - the name of the long
value - the long value to set in the Map
Throws:
javax.jms.MessageNotWriteableException - if the message is in read-only mode

setFloat

public final void setFloat(java.lang.String name,
                           float value)
                    throws javax.jms.MessageNotWriteableException
Set a float value with the given name, into the Map
Specified by:
setFloat in interface javax.jms.MapMessage
Parameters:
name - the name of the float
value - the float value to set in the Map
Throws:
javax.jms.MessageNotWriteableException - if the message is in read-only mode

setDouble

public final void setDouble(java.lang.String name,
                            double value)
                     throws javax.jms.MessageNotWriteableException
Set a double value with the given name, into the Map
Specified by:
setDouble in interface javax.jms.MapMessage
Parameters:
name - the name of the double
value - the double value to set in the Map
Throws:
javax.jms.MessageNotWriteableException - if the message is in read-only mode

setString

public final void setString(java.lang.String name,
                            java.lang.String value)
                     throws javax.jms.MessageNotWriteableException
Set a String value with the given name, into the Map
Specified by:
setString in interface javax.jms.MapMessage
Parameters:
name - the name of the String
value - the String value to set in the Map
Throws:
javax.jms.MessageNotWriteableException - if the message is in read-only mode

setBytes

public final void setBytes(java.lang.String name,
                           byte[] value)
                    throws javax.jms.MessageNotWriteableException
Set a byte array value with the given name, into the Map
Specified by:
setBytes in interface javax.jms.MapMessage
Parameters:
name - the name of the byte array
value - the byte array value to set in the Map. The array is copied so the value for name will not be altered by future modifications.
Throws:
javax.jms.MessageNotWriteableException - if the message is in read-only mode

setBytes

public final void setBytes(java.lang.String name,
                           byte[] value,
                           int offset,
                           int length)
                    throws javax.jms.MessageNotWriteableException
Set a portion of the byte array value with the given name, into the Map
Specified by:
setBytes in interface javax.jms.MapMessage
Parameters:
name - the name of the byte array
value - the byte array value to set in the Map.
offset - the initial offset within the byte array.
length - the number of bytes to use.
Throws:
javax.jms.MessageNotWriteableException - if the message is in read-only mode

setObject

public final void setObject(java.lang.String name,
                            java.lang.Object value)
                     throws javax.jms.MessageFormatException,
                            javax.jms.MessageNotWriteableException
Set a Java object value with the given name, into the Map

Note that this method only works for the objectified primitive object types (Integer, Double, Long ...), String's and byte arrays.

Specified by:
setObject in interface javax.jms.MapMessage
Parameters:
name - the name of the Java object
value - the Java object value to set in the Map
Throws:
javax.jms.MessageFormatException - if object is invalid
javax.jms.MessageNotWriteableException - if message in read-only mode.

itemExists

public final boolean itemExists(java.lang.String name)
Check if an item exists in this MapMessage
Specified by:
itemExists in interface javax.jms.MapMessage
Parameters:
name - the name of the item to test
Returns:
true if the item exists

clearBody

public final void clearBody()
                     throws javax.jms.JMSException
Clear out the message body. Clearing a message's body does not clear its header values or property entries. If this message body was read-only, calling this method leaves the message body is in the same state as an empty body in a newly created message
Specified by:
clearBody in interface javax.jms.Message
Overrides:
clearBody in class MessageImpl


Copyright © 1999-2007 The OpenJMS Group. All Rights Reserved.