diff options
| author | Charles E. Rolke <chug@apache.org> | 2014-08-05 19:58:15 +0000 |
|---|---|---|
| committer | Charles E. Rolke <chug@apache.org> | 2014-08-05 19:58:15 +0000 |
| commit | 5d438870047a962bfa9c7b24b4a9a2c68fa2ef11 (patch) | |
| tree | 8767942f212f7626289b94b45d9611858ee7c4fe /qpid/cpp/bindings | |
| parent | 17dc8fe1a9ef5ef2ec3f5905f7be397c346c3cde (diff) | |
| download | qpid-python-5d438870047a962bfa9c7b24b4a9a2c68fa2ef11.tar.gz | |
QPID-5964: Add SetContentObject support for list and map.
Fix GetContentObject return value warning.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1615992 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/bindings')
3 files changed, 60 insertions, 1 deletions
diff --git a/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp b/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp index c62bf9446f..cbf477bcaa 100644 --- a/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp +++ b/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp @@ -571,12 +571,13 @@ namespace Messaging { ThrowIfDisposed();
System::Exception ^ newException = nullptr;
+ System::Object ^ result = nullptr;
try
{
::qpid::types::Variant nativeObject = nativeObjPtr->getContentObject();
- return TypeTranslator::NativeToManagedObject(nativeObject);
+ result = TypeTranslator::NativeToManagedObject(nativeObject);
}
catch (const ::qpid::types::Exception & error)
{
@@ -588,6 +589,8 @@ namespace Messaging { {
throw newException;
}
+
+ return result;
}
System::String ^ Message::MapAsString(System::Collections::Generic::Dictionary<
diff --git a/qpid/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp b/qpid/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp index 3659f7f8b3..01ec8056c6 100644 --- a/qpid/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp +++ b/qpid/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp @@ -242,6 +242,18 @@ namespace Messaging { ::qpid::types::Uuid newUuid = ::qpid::types::Uuid(pinnedBuf);
qpidVariant = newUuid;
}
+ else if (QpidTypeCheck::ObjectIsMap(managedValue))
+ {
+ ::qpid::types::Variant::Map newMap;
+ ManagedToNative((QpidMap ^)managedValue, newMap);
+ qpidVariant = newMap;
+ }
+ else if (QpidTypeCheck::ObjectIsList(managedValue))
+ {
+ ::qpid::types::Variant::List newList;
+ ManagedToNative((QpidList ^)managedValue, newList);
+ qpidVariant = newList;
+ }
else
{
throw gcnew System::NotImplementedException();
diff --git a/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs b/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs index 3912278148..bf9620d785 100644 --- a/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs +++ b/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs @@ -375,6 +375,50 @@ namespace Org.Apache.Qpid.Messaging.UnitTest gotThis = message.GetContentObject();
StringAssert.IsMatch("System.Guid", gotThis.GetType().ToString());
StringAssert.IsMatch("03020100-0504-0706-0809-0a0b0c0d0e0f", gotThis.ToString());
+
+ Dictionary<string, object> content = new Dictionary<string, object>();
+ Dictionary<string, object> subMap = new Dictionary<string, object>();
+ Collection<object> colors = new Collection<object>();
+
+ // Test object map
+ // add simple types
+ content["id"] = 987654321;
+ content["name"] = "Widget";
+ content["percent"] = 0.99;
+
+ // add nested amqp/map
+ subMap["name"] = "Smith";
+ subMap["number"] = 354;
+ content["nestedMap"] = subMap;
+
+ // add an amqp/list
+ colors.Add("red");
+ colors.Add("green");
+ colors.Add("white");
+ // list contains null value
+ colors.Add(null);
+ content["colorsList"] = colors;
+
+ // add one of each supported amqp data type
+ bool mybool2 = true;
+ content["mybool"] = mybool2;
+
+ message.SetContentObject(content);
+ gotThis = message.GetContentObject();
+ StringAssert.Contains("System.Collections.Generic.Dictionary`2[System.String,System.Object]", gotThis.GetType().ToString());
+ // Can't compare objects as strings since the maps get reordered
+ // so compare each item
+ foreach (KeyValuePair<string, object> kvp in content)
+ {
+ object gotObj = ((Dictionary<string, object>)(gotThis))[kvp.Key];
+ StringAssert.Contains(kvp.Value.ToString(), gotObj.ToString());
+ }
+
+ // test object list
+ message.SetContentObject(colors);
+ gotThis = message.GetContentObject();
+ StringAssert.Contains("System.Collections.ObjectModel.Collection`1[System.Object]", gotThis.GetType().ToString());
+ StringAssert.Contains(message.ListAsString(colors), message.ListAsString((Collection<object>)gotThis));
}
}
}
|
