summaryrefslogtreecommitdiff
path: root/qpid/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/cpp/src')
-rw-r--r--qpid/cpp/src/qpid/messaging/amqp/EncodedMessage.cpp19
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) {