in broker-plugins/amqp-msg-conv-0-10-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/MessageConverter_0_10_to_1_0.java [66:235]
protected MessageMetaData_1_0 convertMetaData(MessageTransferMessage serverMessage,
final EncodingRetainingSection<?> bodySection,
SectionEncoder sectionEncoder)
{
Properties props = new Properties();
props.setCreationTime(new Date(serverMessage.getArrivalTime()));
final MessageProperties msgProps = serverMessage.getHeader().getMessageProperties();
final DeliveryProperties deliveryProps = serverMessage.getHeader().getDeliveryProperties();
Header header = new Header();
if(deliveryProps != null)
{
header.setDurable(deliveryProps.hasDeliveryMode()
&& deliveryProps.getDeliveryMode() == MessageDeliveryMode.PERSISTENT);
if (deliveryProps.hasPriority())
{
header.setPriority(UnsignedByte.valueOf((byte) deliveryProps.getPriority().getValue()));
}
if (deliveryProps.hasTtl())
{
header.setTtl(UnsignedInteger.valueOf(deliveryProps.getTtl()));
}
else if (deliveryProps.hasExpiration())
{
long ttl = Math.max(0, deliveryProps.getExpiration() - serverMessage.getArrivalTime());
header.setTtl(UnsignedInteger.valueOf(ttl));
}
if(deliveryProps.hasTimestamp())
{
props.setCreationTime(new Date(deliveryProps.getTimestamp()));
}
String to = deliveryProps.getExchange();
if (deliveryProps.getRoutingKey() != null)
{
String routingKey = deliveryProps.getRoutingKey();
if (to != null && !"".equals(to))
{
to += "/" + routingKey;
}
else
{
to = routingKey;
}
}
props.setTo(to);
}
ApplicationProperties applicationProperties = null;
String originalContentMimeType = null;
if(msgProps != null)
{
if(msgProps.hasContentEncoding()
&& !GZIPUtils.GZIP_CONTENT_ENCODING.equals(msgProps.getContentEncoding())
&& bodySection instanceof DataSection)
{
props.setContentEncoding(Symbol.valueOf(msgProps.getContentEncoding()));
}
if(msgProps.hasCorrelationId())
{
CharsetDecoder charsetDecoder = StandardCharsets.UTF_8.newDecoder()
.onMalformedInput(CodingErrorAction.REPORT)
.onUnmappableCharacter(CodingErrorAction.REPORT);
try
{
String correlationIdAsString = charsetDecoder.decode(ByteBuffer.wrap(msgProps.getCorrelationId())).toString();
props.setCorrelationId(correlationIdAsString);
}
catch (CharacterCodingException e)
{
props.setCorrelationId(new Binary(msgProps.getCorrelationId()));
}
}
if(msgProps.hasMessageId())
{
props.setMessageId(msgProps.getMessageId());
}
if(msgProps.hasReplyTo())
{
ReplyTo replyTo = msgProps.getReplyTo();
String to = null;
if (replyTo.hasExchange() && !"".equals(replyTo.getExchange()))
{
to = replyTo.getExchange();
}
if (replyTo.hasRoutingKey())
{
if (to != null)
{
to += "/" + replyTo.getRoutingKey();
}
else
{
to = replyTo.getRoutingKey();
}
}
props.setReplyTo(to);
}
if(msgProps.hasContentType())
{
originalContentMimeType = msgProps.getContentType();
final Symbol contentType =
MessageConverter_to_1_0.getContentType(originalContentMimeType);
props.setContentType(contentType);
}
if(msgProps.hasUserId())
{
props.setUserId(new Binary(msgProps.getUserId()));
}
Map<String, Object> applicationPropertiesMap = msgProps.getApplicationHeaders();
if(applicationPropertiesMap != null)
{
applicationPropertiesMap = new LinkedHashMap<>(applicationPropertiesMap);
if (applicationPropertiesMap.containsKey("x-jms-type"))
{
props.setSubject(String.valueOf(applicationPropertiesMap.get("x-jms-type")));
applicationPropertiesMap.remove("x-jms-type");
}
if(applicationPropertiesMap.containsKey("qpid.subject"))
{
props.setSubject(String.valueOf(applicationPropertiesMap.get("qpid.subject")));
applicationPropertiesMap.remove("qpid.subject");
}
if(applicationPropertiesMap.containsKey("JMSXGroupID"))
{
props.setGroupId(String.valueOf(applicationPropertiesMap.get("JMSXGroupID")));
applicationPropertiesMap.remove("JMSXGroupID");
}
if(applicationPropertiesMap.containsKey("JMSXGroupSeq"))
{
Object jmsxGroupSeq = applicationPropertiesMap.get("JMSXGroupSeq");
if (jmsxGroupSeq instanceof Integer)
{
props.setGroupSequence(UnsignedInteger.valueOf((Integer)jmsxGroupSeq));
applicationPropertiesMap.remove("JMSXGroupSeq");
}
}
try
{
applicationProperties = new ApplicationProperties(applicationPropertiesMap);
}
catch (IllegalArgumentException e)
{
throw new MessageConversionException("Could not convert message from 0-10 to 1.0 because application headers conversion failed.", e);
}
}
}
final MessageAnnotations messageAnnotation =
MessageConverter_to_1_0.createMessageAnnotation(bodySection, originalContentMimeType);
return new MessageMetaData_1_0(header.createEncodingRetainingSection(),
null,
messageAnnotation == null ? null : messageAnnotation.createEncodingRetainingSection(),
props.createEncodingRetainingSection(),
applicationProperties == null ? null : applicationProperties.createEncodingRetainingSection(),
null,
serverMessage.getArrivalTime(),
bodySection.getEncodedSize());
}