From 99c81b97860d64b476a40090231d823996db82a6 Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Mon, 21 Jul 2014 12:44:19 +0000 Subject: QPID-5908: merge annotations into properties, don't replace existing elements git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1612258 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/cpp/src/qpid/messaging/amqp/EncodedMessage.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'qpid/cpp/src') diff --git a/qpid/cpp/src/qpid/messaging/amqp/EncodedMessage.cpp b/qpid/cpp/src/qpid/messaging/amqp/EncodedMessage.cpp index 179297278f..14fc09505d 100644 --- a/qpid/cpp/src/qpid/messaging/amqp/EncodedMessage.cpp +++ b/qpid/cpp/src/qpid/messaging/amqp/EncodedMessage.cpp @@ -117,6 +117,21 @@ void EncodedMessage::init(qpid::messaging::MessageImpl& impl) } void EncodedMessage::setNestAnnotationsOption(bool b) { nestAnnotations = b; } +namespace { +using qpid::types::Variant; +void merge(qpid::types::Variant::Map& map, const qpid::types::Variant::Map& additions) +{ + for (Variant::Map::const_iterator i = additions.begin(); i != additions.end(); ++i) + { + if (map.find(i->first) == map.end()) { + map[i->first] = i->second; + } else { + QPID_LOG(info, "Annotation " << i->first << " hidden by application property of the same name (consider using nest_annotations option?)"); + } + } +} +} + void EncodedMessage::populate(qpid::types::Variant::Map& map) const { try { @@ -156,7 +171,7 @@ void EncodedMessage::populate(qpid::types::Variant::Map& map) const if (nestAnnotations) { map["x-amqp-delivery-annotations"] = decoder.readMap(); } else { - decoder.readMap(map); + merge(map, decoder.readMap()); } } if (messageAnnotations) { @@ -164,7 +179,7 @@ void EncodedMessage::populate(qpid::types::Variant::Map& map) const if (nestAnnotations) { map["x-amqp-message-annotations"] = decoder.readMap(); } else { - decoder.readMap(map); + merge(map, decoder.readMap()); } } } catch (const qpid::Exception& e) { -- cgit v1.2.1