diff options
Diffstat (limited to 'qpid/cpp/src')
| -rw-r--r-- | qpid/cpp/src/qpid/messaging/amqp/EncodedMessage.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
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) { |
