- java.lang.Object
-
- com.rabbitmq.jms.client.RMQMessage
-
- All Implemented Interfaces:
jakarta.jms.Message,java.lang.Cloneable
- Direct Known Subclasses:
RMQBytesMessage,RMQMapMessage,RMQObjectMessage,RMQStreamMessage,RMQTextMessage
public abstract class RMQMessage extends java.lang.Object implements jakarta.jms.Message, java.lang.CloneableBase class for RMQ*Message classes. This is abstract and cannot be instantiated independently.
-
-
Field Summary
Fields Modifier and Type Field Description protected static intDEFAULT_MESSAGE_BODY_SIZEWhen we create a message that has a byte[] as the underlying structure, BytesMessage and StreamMessage, this is the default size.protected org.slf4j.LoggerloggerLogger shared with derived classesprotected static java.lang.StringMSG_EOFError message when we get an EOF exceptionprotected static java.lang.StringNOT_READABLEError message when the message is not readableprotected static java.lang.StringNOT_WRITEABLEError message when the message is not writeableprotected static java.lang.StringUNABLE_TO_CASTError message used when throwingMessageFormatException
-
Constructor Summary
Constructors Constructor Description RMQMessage()Constructor for auto de-serialization
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description voidacknowledge()Although the JavaDoc implies otherwise, this call acknowledges all unacknowledged messages on the message's session.voidclearBody()protected abstract voidclearBodyInternal()voidclearProperties()java.lang.Objectclone()protected static voidcopyAttributes(RMQMessage rmqMessage, jakarta.jms.Message message)Assign generic attributes.protected abstract <T> TdoGetBody(java.lang.Class<T> c)static voiddoNotDeclareReplyToDestination(jakarta.jms.Message message)Indicates to not declare a reply-toRMQDestination.booleanequals(java.lang.Object obj)<T> TgetBody(java.lang.Class<T> c)booleangetBooleanProperty(java.lang.String name)bytegetByteProperty(java.lang.String name)doublegetDoubleProperty(java.lang.String name)floatgetFloatProperty(java.lang.String name)java.lang.StringgetInternalID()Returns the unique ID for this message.intgetIntProperty(java.lang.String name)java.lang.StringgetJMSCorrelationID()byte[]getJMSCorrelationIDAsBytes()intgetJMSDeliveryMode()longgetJMSDeliveryTime()jakarta.jms.DestinationgetJMSDestination()longgetJMSExpiration()java.lang.StringgetJMSMessageID()intgetJMSPriority()booleangetJMSRedelivered()jakarta.jms.DestinationgetJMSReplyTo()longgetJMSTimestamp()java.lang.StringgetJMSType()longgetLongProperty(java.lang.String name)java.lang.ObjectgetObjectProperty(java.lang.String name)java.util.Enumeration<?>getPropertyNames()longgetRabbitDeliveryTag()returns the delivery tag for this messageRMQSessiongetSession()Returns the session this object belongs toshortgetShortProperty(java.lang.String name)java.lang.StringgetStringProperty(java.lang.String name)inthashCode()abstract booleanisAmqpWritable()protected booleanisReadonlyBody()Returns true if this message body is read only This means that message has been received and can not be modifiedprotected booleanisReadOnlyProperties()protected voidloggerDebugByteArray(java.lang.String format, byte[] buffer, java.lang.Object arg)booleanpropertyExists(java.lang.String name)protected abstract voidreadAmqpBody(byte[] barr)Invoked when an AMQP message is being transformed into a RMQMessage The implementing class should only read its body by this methodprotected abstract voidreadBody(java.io.ObjectInput inputStream, java.io.ByteArrayInputStream bin)Invoked when a message is being deserialized to read and decode the message body.protected static java.lang.ObjectreadPrimitive(java.io.ObjectInput in)Utility method to read objects from a stream.voidsetBooleanProperty(java.lang.String name, boolean value)voidsetByteProperty(java.lang.String name, byte value)voidsetDoubleProperty(java.lang.String name, double value)voidsetFloatProperty(java.lang.String name, float value)voidsetIntProperty(java.lang.String name, int value)voidsetJMSCorrelationID(java.lang.String correlationID)voidsetJMSCorrelationIDAsBytes(byte[] correlationID)voidsetJMSDeliveryMode(int deliveryMode)voidsetJMSDeliveryTime(long deliveryTime)voidsetJMSDestination(jakarta.jms.Destination destination)voidsetJMSExpiration(long expiration)voidsetJMSMessageID(java.lang.String id)voidsetJMSPriority(int priority)voidsetJMSRedelivered(boolean redelivered)voidsetJMSReplyTo(jakarta.jms.Destination replyTo)voidsetJMSTimestamp(long timestamp)voidsetJMSType(java.lang.String type)voidsetLongProperty(java.lang.String name, long value)voidsetObjectProperty(java.lang.String name, java.lang.Object value)protected voidsetRabbitDeliveryTag(long rabbitDeliveryTag)Sets the RabbitMQ delivery tag for this message.protected voidsetReadonly(boolean readonly)Sets the read only flag on this messageprotected voidsetReadOnlyBody(boolean readonly)protected voidsetReadOnlyProperties(boolean readonly)protected voidsetSession(RMQSession session)Sets the session this object was received byvoidsetShortProperty(java.lang.String name, short value)voidsetStringProperty(java.lang.String name, java.lang.String value)protected abstract voidwriteAmqpBody(java.io.ByteArrayOutputStream out)Invoked whentoAmqpByteArray()is called to create a byte[] from a message.protected abstract voidwriteBody(java.io.ObjectOutput out, java.io.ByteArrayOutputStream bout)Invoked whentoByteArray()is called to create a byte[] from a message.protected static voidwritePrimitive(java.lang.Object s, java.io.ObjectOutput out)Utility method used to be able to write primitives and objects to a data stream without keeping track of order and type.protected static voidwritePrimitive(java.lang.Object s, java.io.ObjectOutput out, boolean allowSerializable)
-
-
-
Field Detail
-
logger
protected final org.slf4j.Logger logger
Logger shared with derived classes
-
NOT_READABLE
protected static final java.lang.String NOT_READABLE
Error message when the message is not readable- See Also:
- Constant Field Values
-
NOT_WRITEABLE
protected static final java.lang.String NOT_WRITEABLE
Error message when the message is not writeable- See Also:
- Constant Field Values
-
UNABLE_TO_CAST
protected static final java.lang.String UNABLE_TO_CAST
Error message used when throwingMessageFormatException- See Also:
- Constant Field Values
-
MSG_EOF
protected static final java.lang.String MSG_EOF
Error message when we get an EOF exception- See Also:
- Constant Field Values
-
DEFAULT_MESSAGE_BODY_SIZE
protected static final int DEFAULT_MESSAGE_BODY_SIZE
When we create a message that has a byte[] as the underlying structure, BytesMessage and StreamMessage, this is the default size. Can be changed with a system property.
-
-
Method Detail
-
loggerDebugByteArray
protected void loggerDebugByteArray(java.lang.String format, byte[] buffer, java.lang.Object arg)
-
isReadonlyBody
protected boolean isReadonlyBody()
Returns true if this message body is read only This means that message has been received and can not be modified- Returns:
- true if the message is read only
-
isReadOnlyProperties
protected boolean isReadOnlyProperties()
-
setReadonly
protected void setReadonly(boolean readonly)
Sets the read only flag on this message- Parameters:
readonly- read only flag value- See Also:
convertMessage(RMQSession, RMQDestination, com.rabbitmq.client.GetResponse, ReceivingContextConsumer)
-
setReadOnlyBody
protected void setReadOnlyBody(boolean readonly)
-
setReadOnlyProperties
protected void setReadOnlyProperties(boolean readonly)
-
getRabbitDeliveryTag
public long getRabbitDeliveryTag()
returns the delivery tag for this message- Returns:
- the delivery tag for this message
-
setRabbitDeliveryTag
protected void setRabbitDeliveryTag(long rabbitDeliveryTag)
Sets the RabbitMQ delivery tag for this message.- Parameters:
rabbitDeliveryTag- RabbitMQ delivery tag- See Also:
convertMessage(RMQSession, RMQDestination, com.rabbitmq.client.GetResponse, ReceivingContextConsumer)
-
getSession
public RMQSession getSession()
Returns the session this object belongs to- Returns:
- the session this object belongs to
-
setSession
protected void setSession(RMQSession session)
Sets the session this object was received by- Parameters:
session- the session this object was received by- See Also:
convertMessage(RMQSession, RMQDestination, com.rabbitmq.client.GetResponse, ReceivingContextConsumer),RMQSession.acknowledgeMessage(RMQMessage)
-
getJMSMessageID
public java.lang.String getJMSMessageID() throws jakarta.jms.JMSException- Specified by:
getJMSMessageIDin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
setJMSMessageID
public void setJMSMessageID(java.lang.String id) throws jakarta.jms.JMSException- Specified by:
setJMSMessageIDin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
getJMSTimestamp
public long getJMSTimestamp() throws jakarta.jms.JMSException- Specified by:
getJMSTimestampin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
setJMSTimestamp
public void setJMSTimestamp(long timestamp) throws jakarta.jms.JMSException- Specified by:
setJMSTimestampin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
getJMSCorrelationIDAsBytes
public byte[] getJMSCorrelationIDAsBytes() throws jakarta.jms.JMSException- Specified by:
getJMSCorrelationIDAsBytesin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
setJMSCorrelationIDAsBytes
public void setJMSCorrelationIDAsBytes(byte[] correlationID) throws jakarta.jms.JMSException- Specified by:
setJMSCorrelationIDAsBytesin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
setJMSCorrelationID
public void setJMSCorrelationID(java.lang.String correlationID) throws jakarta.jms.JMSException- Specified by:
setJMSCorrelationIDin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
getJMSCorrelationID
public java.lang.String getJMSCorrelationID() throws jakarta.jms.JMSException- Specified by:
getJMSCorrelationIDin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
getJMSReplyTo
public jakarta.jms.Destination getJMSReplyTo() throws jakarta.jms.JMSException- Specified by:
getJMSReplyToin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
setJMSReplyTo
public void setJMSReplyTo(jakarta.jms.Destination replyTo) throws jakarta.jms.JMSException- Specified by:
setJMSReplyToin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
getJMSDestination
public jakarta.jms.Destination getJMSDestination() throws jakarta.jms.JMSException- Specified by:
getJMSDestinationin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
setJMSDestination
public void setJMSDestination(jakarta.jms.Destination destination) throws jakarta.jms.JMSException- Specified by:
setJMSDestinationin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
getJMSDeliveryMode
public int getJMSDeliveryMode() throws jakarta.jms.JMSException- Specified by:
getJMSDeliveryModein interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
setJMSDeliveryMode
public void setJMSDeliveryMode(int deliveryMode) throws jakarta.jms.JMSException- Specified by:
setJMSDeliveryModein interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
getJMSRedelivered
public boolean getJMSRedelivered() throws jakarta.jms.JMSException- Specified by:
getJMSRedeliveredin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
setJMSRedelivered
public void setJMSRedelivered(boolean redelivered) throws jakarta.jms.JMSException- Specified by:
setJMSRedeliveredin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
getJMSType
public java.lang.String getJMSType() throws jakarta.jms.JMSException- Specified by:
getJMSTypein interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
setJMSType
public void setJMSType(java.lang.String type) throws jakarta.jms.JMSException- Specified by:
setJMSTypein interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
getJMSExpiration
public long getJMSExpiration() throws jakarta.jms.JMSException- Specified by:
getJMSExpirationin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
setJMSExpiration
public void setJMSExpiration(long expiration) throws jakarta.jms.JMSException- Specified by:
setJMSExpirationin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
getJMSPriority
public int getJMSPriority() throws jakarta.jms.JMSException- Specified by:
getJMSPriorityin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
setJMSPriority
public void setJMSPriority(int priority) throws jakarta.jms.JMSException- Specified by:
setJMSPriorityin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
clearProperties
public final void clearProperties() throws jakarta.jms.JMSException- Specified by:
clearPropertiesin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
propertyExists
public boolean propertyExists(java.lang.String name)
- Specified by:
propertyExistsin interfacejakarta.jms.Message
-
getBooleanProperty
public boolean getBooleanProperty(java.lang.String name) throws jakarta.jms.JMSException- Specified by:
getBooleanPropertyin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
getByteProperty
public byte getByteProperty(java.lang.String name) throws jakarta.jms.JMSException- Specified by:
getBytePropertyin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
getShortProperty
public short getShortProperty(java.lang.String name) throws jakarta.jms.JMSException- Specified by:
getShortPropertyin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
getIntProperty
public int getIntProperty(java.lang.String name) throws jakarta.jms.JMSException- Specified by:
getIntPropertyin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
getLongProperty
public long getLongProperty(java.lang.String name) throws jakarta.jms.JMSException- Specified by:
getLongPropertyin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
getFloatProperty
public float getFloatProperty(java.lang.String name) throws jakarta.jms.JMSException- Specified by:
getFloatPropertyin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
getDoubleProperty
public double getDoubleProperty(java.lang.String name) throws jakarta.jms.JMSException- Specified by:
getDoublePropertyin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
getStringProperty
public java.lang.String getStringProperty(java.lang.String name) throws jakarta.jms.JMSException- Specified by:
getStringPropertyin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
getObjectProperty
public java.lang.Object getObjectProperty(java.lang.String name) throws jakarta.jms.JMSException- Specified by:
getObjectPropertyin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
getPropertyNames
public java.util.Enumeration<?> getPropertyNames() throws jakarta.jms.JMSException- Specified by:
getPropertyNamesin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
setBooleanProperty
public void setBooleanProperty(java.lang.String name, boolean value) throws jakarta.jms.JMSException- Specified by:
setBooleanPropertyin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
setByteProperty
public void setByteProperty(java.lang.String name, byte value) throws jakarta.jms.JMSException- Specified by:
setBytePropertyin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
setShortProperty
public void setShortProperty(java.lang.String name, short value) throws jakarta.jms.JMSException- Specified by:
setShortPropertyin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
setIntProperty
public void setIntProperty(java.lang.String name, int value) throws jakarta.jms.JMSException- Specified by:
setIntPropertyin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
setLongProperty
public void setLongProperty(java.lang.String name, long value) throws jakarta.jms.JMSException- Specified by:
setLongPropertyin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
setFloatProperty
public void setFloatProperty(java.lang.String name, float value) throws jakarta.jms.JMSException- Specified by:
setFloatPropertyin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
setDoubleProperty
public void setDoubleProperty(java.lang.String name, double value) throws jakarta.jms.JMSException- Specified by:
setDoublePropertyin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
setStringProperty
public void setStringProperty(java.lang.String name, java.lang.String value) throws jakarta.jms.JMSException- Specified by:
setStringPropertyin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
setObjectProperty
public void setObjectProperty(java.lang.String name, java.lang.Object value) throws jakarta.jms.JMSException- Specified by:
setObjectPropertyin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
acknowledge
public void acknowledge() throws jakarta.jms.JMSExceptionAlthough the JavaDoc implies otherwise, this call acknowledges all unacknowledged messages on the message's session.The JavaDoc says:
A client may individually acknowledge each message as it is consumed, or it may choose to acknowledge messages as an application-defined group (which is done by calling acknowledge on the last received message of the group, thereby acknowledging all messages consumed by the session.)
...but there is no way to do either of these things, as is explained by the specification[1].
[1] JMS 1.1 spec Section 11.3.2.2.
- Specified by:
acknowledgein interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException- See Also:
RMQSession.acknowledgeMessage(RMQMessage)
-
clearBody
public final void clearBody() throws jakarta.jms.JMSException- Specified by:
clearBodyin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
clearBodyInternal
protected abstract void clearBodyInternal() throws jakarta.jms.JMSException- Throws:
jakarta.jms.JMSException
-
writeBody
protected abstract void writeBody(java.io.ObjectOutput out, java.io.ByteArrayOutputStream bout) throws java.io.IOExceptionInvoked whentoByteArray()is called to create a byte[] from a message. Each subclass must implement this, but ONLY write its specific body. All the properties defined inMessagewill be written by the parent class.- Parameters:
out- - the output stream to which the structured part of message body (scalar types) is writtenbout- - the output stream to which the un-structured part of message body (explicit bytes) is written- Throws:
java.io.IOException- if the body can not be written
-
writeAmqpBody
protected abstract void writeAmqpBody(java.io.ByteArrayOutputStream out) throws java.io.IOExceptionInvoked whentoAmqpByteArray()is called to create a byte[] from a message. Each subclass must implement this, but ONLY write its specific body.- Parameters:
out- - the output stream to which the message body is written- Throws:
java.io.IOException- if the body can not be written
-
readBody
protected abstract void readBody(java.io.ObjectInput inputStream, java.io.ByteArrayInputStream bin) throws java.io.IOException, java.lang.ClassNotFoundExceptionInvoked when a message is being deserialized to read and decode the message body. The implementing class should only read its body from this stream. If any exception is thrown, the message will not have been delivered.- Parameters:
inputStream- - the stream to read its body frombin- - the underlying byte input stream- Throws:
java.io.IOException- if a read error occurs on the input streamjava.lang.ClassNotFoundException- if the object class cannot be found
-
readAmqpBody
protected abstract void readAmqpBody(byte[] barr)
Invoked when an AMQP message is being transformed into a RMQMessage The implementing class should only read its body by this method- Parameters:
barr- - the byte array payload of the AMQP message
-
doNotDeclareReplyToDestination
public static void doNotDeclareReplyToDestination(jakarta.jms.Message message) throws jakarta.jms.JMSExceptionIndicates to not declare a reply-toRMQDestination.This is used for inbound messages, when the reply-to destination is supposed to be already created. This avoids trying to create a second time a temporary queue.
- Parameters:
message-- Throws:
jakarta.jms.JMSException- Since:
- 1.11.0
-
isAmqpWritable
public abstract boolean isAmqpWritable()
-
hashCode
public int hashCode()
- Overrides:
hashCodein classjava.lang.Object
-
equals
public boolean equals(java.lang.Object obj)
- Overrides:
equalsin classjava.lang.Object
-
getInternalID
public java.lang.String getInternalID()
Returns the unique ID for this message. This will return null unless the message has been sent on the wire- Returns:
- internal message ID
-
writePrimitive
protected static void writePrimitive(java.lang.Object s, java.io.ObjectOutput out) throws java.io.IOException, jakarta.jms.MessageFormatExceptionUtility method used to be able to write primitives and objects to a data stream without keeping track of order and type.This also allows any Object to be written.
The purpose of this method is to optimise the writing of a primitive that is represented as an object by only writing the type and the primitive value to the stream.
- Parameters:
s- the primitive to be writtenout- the stream to write the primitive to.- Throws:
java.io.IOException- if an I/O error occursjakarta.jms.MessageFormatException- if message cannot be parsed
-
writePrimitive
protected static void writePrimitive(java.lang.Object s, java.io.ObjectOutput out, boolean allowSerializable) throws java.io.IOException, jakarta.jms.MessageFormatException- Throws:
java.io.IOExceptionjakarta.jms.MessageFormatException
-
readPrimitive
protected static java.lang.Object readPrimitive(java.io.ObjectInput in) throws java.io.IOException, java.lang.ClassNotFoundExceptionUtility method to read objects from a stream. These objects must have been written with the methodwritePrimitive(Object, ObjectOutput)otherwise deserialization will fail and an IOException will be thrown- Parameters:
in- the stream to read from- Returns:
- the Object read
- Throws:
java.io.IOException- if an I/O error occursjava.lang.ClassNotFoundException- if a class of serialized object cannot be found
-
clone
public java.lang.Object clone() throws java.lang.CloneNotSupportedException- Overrides:
clonein classjava.lang.Object- Throws:
java.lang.CloneNotSupportedException
-
copyAttributes
protected static void copyAttributes(RMQMessage rmqMessage, jakarta.jms.Message message) throws jakarta.jms.JMSException
Assign generic attributes.“rmqMessage = (RMQMessage) message;”
With conversion as appropriate.
- Parameters:
rmqMessage- message filled in with attributesmessage- message from which attributes are gained.- Throws:
jakarta.jms.JMSException- if attributes cannot be copied
-
getJMSDeliveryTime
public long getJMSDeliveryTime() throws jakarta.jms.JMSException- Specified by:
getJMSDeliveryTimein interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
setJMSDeliveryTime
public void setJMSDeliveryTime(long deliveryTime) throws jakarta.jms.JMSException- Specified by:
setJMSDeliveryTimein interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
getBody
public <T> T getBody(java.lang.Class<T> c) throws jakarta.jms.JMSException- Specified by:
getBodyin interfacejakarta.jms.Message- Throws:
jakarta.jms.JMSException
-
doGetBody
protected abstract <T> T doGetBody(java.lang.Class<T> c) throws jakarta.jms.JMSException- Throws:
jakarta.jms.JMSException
-
-