{
message.prepareForSending();
AMQMessageDelegate_0_10 delegate = (AMQMessageDelegate_0_10) message.getDelegate();
DeliveryProperties deliveryProp = delegate.getDeliveryProperties();
MessageProperties messageProps = delegate.getMessageProperties();
// On the receiving side, this will be read in to the JMSXUserID as well.
messageProps.setUserId(userIDBytes);
if (messageId != null)
{
messageProps.setMessageId(messageId);
}
else if (messageProps.hasMessageId())
{
messageProps.clearMessageId();
}
long currentTime = 0;
if (timeToLive > 0 || !isDisableTimestamps())
{
currentTime = System.currentTimeMillis();
}
if (timeToLive > 0)
{
deliveryProp.setTtl(timeToLive);
message.setJMSExpiration(currentTime + timeToLive);
}
if (!isDisableTimestamps())
{
deliveryProp.setTimestamp(currentTime);
message.setJMSTimestamp(currentTime);
}
if (!deliveryProp.hasDeliveryMode() || deliveryProp.getDeliveryMode().getValue() != deliveryMode)
{
MessageDeliveryMode mode;
switch (deliveryMode)
{
case DeliveryMode.PERSISTENT:
mode = MessageDeliveryMode.PERSISTENT;
break;
case DeliveryMode.NON_PERSISTENT:
mode = MessageDeliveryMode.NON_PERSISTENT;
break;
default:
throw new IllegalArgumentException("illegal delivery mode: " + deliveryMode);
}
deliveryProp.setDeliveryMode(mode);
message.setJMSDeliveryMode(deliveryMode);
}
if (!deliveryProp.hasPriority() || deliveryProp.getPriority().getValue() != priority)
{
deliveryProp.setPriority(MessageDeliveryPriority.get((short) priority));
message.setJMSPriority(priority);
}
String exchangeName = destination.getExchangeName() == null ? "" : destination.getExchangeName().toString();
if ( deliveryProp.getExchange() == null || ! deliveryProp.getExchange().equals(exchangeName))
{
deliveryProp.setExchange(exchangeName);
}
String routingKey = destination.getRoutingKey().toString();
if (deliveryProp.getRoutingKey() == null || ! deliveryProp.getRoutingKey().equals(routingKey))
{
deliveryProp.setRoutingKey(routingKey);
}
if (destination.getDestSyntax() == AMQDestination.DestSyntax.ADDR &&
(destination.getSubject() != null ||
(messageProps.getApplicationHeaders() != null && messageProps.getApplicationHeaders().get(QpidMessageProperties.QPID_SUBJECT) != null))
)
{
Map<String,Object> appProps = messageProps.getApplicationHeaders();
if (appProps == null)
{
appProps = new HashMap<String,Object>();
messageProps.setApplicationHeaders(appProps);
}
if (appProps.get(QpidMessageProperties.QPID_SUBJECT) == null)
{
// use default subject in address string
appProps.put(QpidMessageProperties.QPID_SUBJECT,destination.getSubject());
}
if (destination.getAddressType() == AMQDestination.TOPIC_TYPE)
{
deliveryProp.setRoutingKey((String)
messageProps.getApplicationHeaders().get(QpidMessageProperties.QPID_SUBJECT));
}
}
ByteBuffer data = message.getData();